完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#define uchar unsigned char #define uint unsigned int ***it dula=P2^6; ***it wela=P2^7; ***it beep=P2^3; uchar h2,h1,f2,f1,s2,s1; uchar pp,temp,key,ok; uchar a0,a1,a2,a3,a4,a5,m,k,t; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delayms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=50;j>0;j--); } void delay(unsigned char z) //延时 { uchar g,l,f; for(g=z;f>0;f--) for(l=125;l>0;l--); } void display(uchar h2,uchar h1,uchar f2,uchar f1,uchar s2,uchar s1) { dula=0; P0=table[h2]; //显示小时十位段码 dula=1; wela=0; P0=0xfe; //显示小时十位 wela=1; delayms(10); dula=0; P0=table[h1]|0x80; //显示小时个位段码及小数点 dula=1; wela=0; P0=0xfd; //显示小时个位 wela=1; delayms(10); dula=0; P0=table[f2]; //显示分钟十位段码 dula=1; wela=0; P0=0xfb; //显示分钟十位 wela=1; delayms(10); dula=0; P0=table[f1]|0x80; //显示分钟十位段码及小数点 dula=1; wela=0; P0=0xf7; //显示分钟十位 wela=1; delayms(10); dula=0; P0=table[s2]; //显示秒钟十位段码 dula=1; wela=0; P0=0xef; //显示秒钟十位 wela=1; delayms(10); dula=0; P0=table[s1]; //显秒钟个位段码 dula=1; wela=0; P0=0xdf; //显示秒钟个位 wela=1; delayms(10); } void keyscan0() //键盘扫描 { dula=0; //关段选 wela=0; //关位选 while(1) { P3=0xfe; //键盘P3口赋值 temp=P3; //把P3口值赋给变量temp temp=temp&0xf0; //屏蔽temp低四位 if(temp!=0xf0) //读temp值 { delay(10); //防抖 if(temp!=0xf0) //再次读temp值 { temp=P3; //P3口值赋给temp switch(temp) //读P3口值 { case 0xee: ok=0; break; case 0xde: ok=1; break; } while(temp!=0xf0) //等待按键释放 { temp=P3; temp=temp&0xf0; beep=0; //蜂鸣器开 } beep=1; //蜂鸣器关 P1=0xfe; //指示灯亮 } } } } void keyscan() //键盘扫描 { dula=0; wela=0; while(1) { P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; beep=0; } beep=1; } } P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; beep=0; } beep=1; } } P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; beep=0; } beep=1; } } } } void main() { TMOD=0x01; TH0=(65536-46080)/256; //定时器装初值 TL0=(65536-46080)%256; EA=1; ET0=1; TR0=1; while(1){ keyscan(); //调用键盘扫描函数 if(ok==0){ TR0=0; keyscan(); //调用键盘扫描函数 switch(key){ case 2: m+=1; // if(m==60) m=0; break; case 3: m-=1; if(m==0) m=60; break; case 4: k+=1; if(k==60) k=0; break; case 5: k-=1; if(k==0) k=60; break; case 6: t+=1; if(t==60) t=0; break; case 7: t-=1; if(t==0) t=60; break; } a5=m%10; a4=m/10; a3=k%10; a2=k/10; a1=t%10; a0=t/10; display(a0,a1,a2,a3,a4,a5); } else { TR0=1; if(pp==20) { pp=0; m++; if(m==60) { m=0; k++; if(k==60) { k=0; t++; if(t==24) { t=0; } } } } a5=m%10; a4=m/10; a3=k%10; a2=k/10; a1=t%10; a0=t/10; display(a0,a1,a2,a3,a4,a5); } } } void time0() interrupt 1 { TH0=(65536-46080)/256; TL0=(65536-46080)%256; pp++; if(pp==20) { pp=0; m++; if(m==60) { m=0; k++; if(k==60) { k=0; t++; if(t==24) { t=0; } } } } } |
|
相关推荐
2 个讨论
|
|
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-28 23:46 , Processed in 0.583889 second(s), Total 50, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号