数码管时钟显示C程序

上传人:ldj****22 文档编号:35548427 上传时间:2018-03-17 格式:DOC 页数:26 大小:114KB
返回 下载 相关 举报
数码管时钟显示C程序_第1页
第1页 / 共26页
数码管时钟显示C程序_第2页
第2页 / 共26页
数码管时钟显示C程序_第3页
第3页 / 共26页
数码管时钟显示C程序_第4页
第4页 / 共26页
数码管时钟显示C程序_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《数码管时钟显示C程序》由会员分享,可在线阅读,更多相关《数码管时钟显示C程序(26页珍藏版)》请在金锄头文库上搜索。

1、/* 数码管时钟显示 led 移动 C 程序使用共阳极数码管*/#include #include#define uint unsigned int #define uchar unsigned char sbit wela1 = P20;/数码管 wela 管脚定义sbit wela2 = P21;sbit wela3 = P22;sbit wela4 = P23; uchar time,d1,d2,d3,d4,temp,tem,aa;unsigned char code table = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;vo

2、id displ(char a,char b,char c,char d); void delay(uint z)/延时程序uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/主函数void main() time=0;TMOD=0x01; /中断定时初始化TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;aa=0;temp=0xfe;tem=0xff;d1=0;d2=0;d3=0;d4=0;while(1) if(time=20)time=0;/ 12 个 led 灯移动显示aa+=1; i

3、f(aa6) tem=_crol_(tem,1);/d4+=1; if(d4=10)d4=0;d3+=1;if(d3=6)d3=0;d2+=1;if(d2=10)d2=0;d1+=1;if(d1=6)d1=0;d2=0;d3=0;d4=0;displ(d1,d2,d3,d4);P1=temp;P3=tem;/动态显示子程序void displ(char a,char b,char c,char d) wela1=0;wela2=0; wela3=0; wela4=0;P0=tablea;wela1=1;wela2=0; wela3=0; wela4=0;delay(5);P0=tableb;w

4、ela1=0;wela2=1; wela3=0; wela4=0;delay(5);P0=tablec;wela1=0;wela2=0; wela3=1; wela4=0;delay(5);P0=tabled;wela1=0;wela2=0; wela3=0; wela4=1;delay(5);/中断定时程序void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;time +;2010-12-17双流这个是51hei 开发板专区里转来的一个程序,注释很详细,运行也没有问题,原文地址:http:/ sbit wei

5、=P27;uchar a,numw,numd;uchar code tabled=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /*第二步骤,创建段显数值的对码表09数值.如果要显示18数值,最好多加前后两位数0跟9,因为后面+移位时就能按我们常规顺序亮下去,至于如何显示对应数值请先看数码显示电路图*/ uchar code tablew=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; /第二步骤,创建位显,就是显示的位置,这个码表相对简单,用二进制表示1111111001111111,是0的为八位数显管

6、的位置void main()a=0; /定义个时间函数numw=0; /附位显初值为0位numd=0; /附段显初值为0位TMOD=0X01; /第四步骤,附中断暂存器初值TH0=(65535-50000)/256; /附中断请求时间初值,高8位TL0=(65536-50000)%256; /附中断请求时间初值,低8位EA=1; /开启总中断ET0=1; /开启定时中断TR0=1; /启动定时中断while(1)if(a=10) /第三步骤,执行速度,如果等20差不多是1秒,则往下执行,相当于单位数值亮的时间a=0; /重新附值初值0numd+; /段显值+if(numd=9) /如果段值在对

7、码表第9位则转下执行 numd=1; /*重新附值段显值对应对码表第1位,因为+所以0位并不在数码管中显示.如果要显示,也会因为+而在第二轮中显示出*/duan=1; /开启段显端P0=tablednumd;/附段显 P0值对应段显值对码表duan=0; /锁存wei=1; /开启位显端P0=tablewnumw;/附位显 P0值对应位显值对码表wei=0; /锁存numw+; /相当于位显移位if(numw=8) /如果位显值到对应位显对码表第八位则转下执行numw=0; /重新附值位显值对应对码表第0位起/*下面是简单的单个数码管显示例证 第一骤, 修改后在第三步骤内#include“re

8、g52.h“#include“intrins.h“sbit duan=P26; /段显端口sbit wei=P27; /位显端口void main()/P0=0xff; 数码管不显示任何信号,默认情况下通电本身就不显示,可以不写duan=1; /开启段显端口P0=0x06; /附值段显数值为1,可以查阅数码管电路图相对应显示的对码表duan=0; /锁存,保持上一步段显状态,硬件说明请查阅74HC573功能wei=1; /开启位显端口P0=0xfe; /附值位显位置,01111111,左边第一位,为0的显示wei=0; /锁存,保持上一步位显状态,硬件说明请查阅74HC573功能*/void

9、timer0() interrupt 1 /*第四步骤,中断时间函数这个相当于移位数显的速度,速度够快,人眼就会有余辉效应,感觉8位数显一直在亮着,相当于正在播放的电影胶卷*/TH0=(65536-50000)/256;TL0=(65536-50000)%256;a+;/*以上有什么地方还需要改进的还请老师明示*/*作者:胡甲 如需转载请注明出处*/*湖北工业大学工程技术学院 通信专业*/*单片机 SST89E58RD 8位共阳数码管 12M 晶振*/*P0段选,P2位选*/*2008年12月1号*/#include “at89x52.h“#define uchar unsigned char

10、#define uint unsigned intuchar code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff;uchar n;uchar hh,mm,ss;uchar nhh,nmm,nss;uint year;uchar day,mon,week;uchar hhs,hhg,mms,mmg,sss,ssg;uchar days,dayg,mons,mong;uchar nhhs,nhhg,nmms,nmmg,nsss,nssg;uchar set1=1,set2=1;sbit fm=P32;sbit k

11、1=P34;sbit k2=P35;sbit k3=P36;sbit k4=P37;uchar table1=31,31,29,31,30,31,30,31,31,30,31,30,31; /闰年uchar table2=31,31,28,31,30,31,30,31,31,30,31,30,31; /非闰年void jishi();void baoshi();void alarm();void set_time();void set_alarm();void set_mdw();void key_change();void key_set();void delay(int m) /延时程序,

12、延时 m*0.5msuint i;uint j;for (i=0;iunsigned char seven_seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned char flash,mode=0;char min=50,hour=12,hour_rom,min_rom,sec=25;unsigned char j,k;unsigned int i;unsigned char key_set_s,key_up_s,key_down_s,key_reset_s;sbit P0_7=P07;sbit key_set=P34;s

13、bit key_up=P35;sbit key_down=P36;sbit key_reset=P37; sbit buzzer=P10;bit dop,bb; /声明void delay(unsigned int x) /延时while(x-);void timer0_isr(void) interrupt 1 /中断服务函数TH0=0xf8; /为 65535-2000=63535 转化为 16 进制取高八位TL0=0x2f; /取低八位i+;bb=!bb;if(i=250) /半秒,五百一秒i=0;k+;flash=flash;dop=!dop;if(k=2) /大于二归零k=0;sec

14、+; if(sec=60) /秒sec=0;min+; if(min=60) /分min=0;hour+; if(hour=24) /小时hour=0; P0=0xff; /P0 初始化为全 1 11111111if(mode=0) /正常显示switch(j) /控制语句case 0:P0=seven_segsec%10;P2=0xfe;break; /秒个位case 1:P0=seven_segsec/10;P2=0xfd;break; /秒十位case 2:P0=seven_segmin%10;P0_7=dop;P2=0xfb;break;case 3:P0=seven_segmin/1

15、0;P2=0xf7;break;case 4:P0=seven_seghour%10;P0_7=dop;P2=0xef;break; /dop 为小数点case 5:P0=seven_seghour/10;P2=0xdf;break;/if(mode=1) /模式一 C1 状态switch(j)case 0:P0=seven_segmin%10;P2=0xfe;break;case 1:P0=seven_segmin/10;P2=0xfd;break;case 2:P0=seven_seghour%10| flash;P2=0xfb;break; /flash 为闪烁case 3:P0=seven_seghour/10| flash;P2=0xf7;break;ca

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号