网站大量收购独家精品文档,联系QQ:2885784924

基于单片机的数字子时钟设计2.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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++;//计数加1 TH0=(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)

bguarfan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档