- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于单片机的数字子时钟设计2
基于单片机的数字电子时钟设计
以上是proteus里的原理图。以下是程序:
#includereg51.h?? sbit ksec=P1^1;sbit kmin=P1^2;sbit khour=P1^3;sbit pkey=P3^2;unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;unsigned int num=0,sec=0,min=0,hour=0;unsigned char code table[10]={???????????????? 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XD8,0X80,0X90???? };void delay(unsigned int);void keyscan();void display();void init(void){TMOD=0x01; //定时器0工作在方式1??? TH0=(65536-50000)/256; //定时50ms,定时器0高8位初值??? TL0=(65536-50000)%256; //定时50ms,定时器0低8位初值??? EA=1;??? ET0=1;//开启中断允许寄存器??? TR0=1;//使TR0置位,启动定时器,定时器便开始计数 ,计数溢出时,自动进入中断服务程序//开启外部中断,并使得低电平触发EX0=1;????????????? // ????INT0???IT0=0;????????????? // ????INT0(?????)
}void main(){?? init();?? IE???? //0X8A打开外部中断和定时器中断?? while(1)????? {display();//调用显示函数?????? keyscan();//键盘扫描程序????? }}void delay(unsigned int z){unsigned int x,y;for(x=z;x0;x--)?? for(y=110;y0;y--);}//延时函数
//时钟设置子程序,定时器中断程序void time0() interrupt 1{num++;//计数加1TH0=(65536-50000)/256; ??? //重装初值TL0=(65536-50000)%256;}
// LED显示程序void display(){if(num==20)?? {num=0; ??? sec++;//如果num=20,则一秒时间到,秒加1??? if(sec==60)???? {sec=0;????? min++;//如果sec=60,则一分钟时间到,分加1????? if(min==60)??????? {min=0;???????? hour++;//如果min=60,则一小时时间到,小时加1???????? if(hour==24)?????????? {hour=0;??????????? min=0;??????????? sec=0;//到了23点59分59秒时候 最后归零??????????? }???????? }????? }?? }secge=sec%10;//秒求余secshi=sec/10;//秒求模minge=min%10;//分求余minshi=min/10;//分求模hourge=hour%10;//小时求余hourshi=hour/10;//小时求模
P0=0x80;?? //OXFE是什么?位选?选最后一位,秒?P2=table[secge]; //段选delay(4);
P0=0x40;?? /选中秒的第十位P2=table[secshi];delay(4);
P0=0x20;?? /选中分的个位P2=table[minge];delay(4);
P0=0x10;?? /,选中分的十位P2=table[minshi];delay(4);
P0=0x08; /选中小时的个位P2=table[hourge];delay(4);
P0=0x04;/,选中小时的十位P2=table[hourshi];delay(4);}// 按键控制子程序,将出去暂停键之外的其他键放在键盘扫描程序里,暂停键放在外部中断0里面,为了保证记住上一个状态void keyscan(){if(ksec==0)?? {
文档评论(0)