完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
请大侠看看这个程序有什么错误,数码管后两位显示有重影,
/*一共两按键,1按键选功能,2按键调节,调节顺序时,分, 秒,月,日,年,周,不在调节功能时按2键显示月日,两键 同时按初始化DS1302*/ #include #include "ds1302.h" #define leddata P1 #define sec 0x80 #define min 0x82 #define hou 0x84 #define dat 0x86 #define mou 0x88 #define wek 0x8a #define yer 0x8c #define read 0x01 ***it SET=P3^1; ***it UP=P3^2; ***it led0=P3^4; ***it led1=P3^3; ***it led2=P3^5; ***it led3=P3^7; //**************函数声明***************** void delays(unsigned char); void display(void); void Scan_Key(void); void id_case1_key(); void Set_id(unsigned char ,unsigned char); //*************变量定义****************** unsigned char id=0,timecount,re_disp=0,ahour=0,aminute=0,asecond=0,adate=0,amouth=0,aweek=0,ayear=0; bit year,mouth,date,week,hour,minute,second,flag,tlamp; unsigned char code tab[]={ 0x05,/*0*/ 0xDD,/*1*/ 0x46,/*2*/ 0x54,/*3*/ 0x9C,/*4*/ 0x34,/*5*/ 0x24,/*6*/ 0x5D,/*7*/ 0x04,/*8*/ 0x14,/*9*/ }; /*个位0~9的数码管段码*/ unsigned char inittime[7]={0x00,0x00,0x12,0x07,0x03,0x08,0x04}; // 秒 分钟 小时 日 月 年 星期 void t0(void) interrupt 1 using 0 { TH0=(65535-59524)/256; TL0=(65535-59524)%256; timecount++;re_disp++; if(timecount>9) { timecount=0; flag=~flag; } if(re_disp>200){re_disp=0;if(id)id=0;} } void delays(unsigned char k) { unsigned char i,j; for(i=0;i } void readtime(void) {leddata=0xff; adate=Read1302(dat|read); amouth=Read1302(mou|read); aweek=Read1302(wek|read); ayear=Read1302(yer|read); ahour=Read1302(hou|read); aminute=Read1302(min|read); asecond=Read1302(sec|read); } void display1(void) { readtime(); if(flag&hour) { led0=0;leddata=0xff;delays(10);led0=1; led1=0;leddata=0xff;delays(10);led1=1; } else { leddata=tab[ahour/16];led0=0;delays(10); delays(10);led0=1; leddata=tab[ahour%16];led1=0;delays(10); delays(10);led1=1; } if(flag&minute) { led2=0;leddata=0xff;delays(10);led2=1; led3=0;leddata=0xff;delays(10);led3=1; } else { leddata=tab[aminute/16];led2=0;delays(10); if(flag==1){if(led2==0)P1_2=0;else P1_2=1;};delays(10);led2=1; leddata=tab[aminute%16];led3=0;delays(10); if(flag==1){if(led3==0)P1_2=0;else P1_2=1;};delays(10);led3=1; } } void display2(void) { readtime(); if(flag&second) { led2=0;leddata=0xff;delays(10);led2=1; led3=0;leddata=0xff;delays(10);led3=1; } else { leddata=tab[asecond/16];led2=0;delays(10); if(flag==1){if(led2==0)P1_2=0;else P1_2=1;};delays(10);led2=1; leddata=tab[asecond%16];led3=0;delays(10); if(flag==1){if(led3==0)P1_2=0;else P1_2=1;};delays(10);led3=1; } } void display3(void) { readtime(); if(flag&mouth) { led0=0;leddata=0xff;delays(10);led0=1; led1=0;leddata=0xff;delays(10);led1=1; } else { leddata=tab[amouth/16];led0=0;delays(10); delays(10);led0=1; leddata=tab[amouth%16];led1=0;delays(10); delays(10);led1=1; } if(flag&date) { led2=0;leddata=0xff;delays(10);led2=1; led3=0;leddata=0xff;delays(10);led3=1; } else { leddata=tab[adate/16];led2=0;delays(10); if(flag==1){if(led2==0)P1_2=0;else P1_2=1;};delays(10);led2=1; leddata=tab[adate%16];led3=0;delays(10);led3=1; } } void display4(void) { readtime(); if(flag&year) { led0=0;leddata=0xff;delays(10);led0=1; led1=0;leddata=0xff;delays(10);led1=1; led2=0;leddata=0xff;delays(10);led2=1; led3=0;leddata=0xff;delays(10);led3=1; } else { leddata=tab[2];led0=0;delays(10);delays(10);led0=1; leddata=tab[0];led1=0;delays(10);delays(10);led1=1; leddata=tab[ayear/16];led2=0;delays(10);delays(10);led2=1; leddata=tab[ayear%16];led3=0;delays(10);delays(10);led3=1; } } void display5(void) { readtime(); if(flag&week) { led0=0;leddata=0xff;delays(10);led0=1; led1=0;leddata=0xff;delays(10);led1=1; led2=0;leddata=0xff;delays(10);led2=1; led3=0;leddata=0xff;delays(10);led3=1; } else { leddata=0xfe;led0=0;delays(10);delays(10);led0=1; leddata=0xfe;led1=0;delays(10);delays(10);led1=1; leddata=tab[aweek%16];led2=0;delays(10);delays(10);led2=1; leddata=0xfe;led3=0;delays(10);delays(10);led3=1; } } void display(void) { switch(id) {case 0: display1();break; case 1: display1();break; case 2: display1();break; case 3: display2();break; case 4: display3();break; case 5: display3();break; case 6: display4();break; case 7: display5();break; default:break; } } void Scan_Key(void) { display(); if(id==0) {if (!UP) { while(!UP)display3(); re_disp=0; } } if(!SET) { while(!SET) display(); re_disp=0; id++;if(id>7)id=0; } if(id==0){year=0;mouth=0;date=0;week=0;hour=0;minute=0;second=0;} if(id==1){hour=1;id_case1_key();} if(id==2){hour=0;minute=1;id_case1_key();} if(id==3){minute=0;second=1;id_case1_key();} if(id==4){second=0;mouth=1;id_case1_key();} if(id==5){mouth=0;date=1;id_case1_key();} if(id==6){date=0;year=1;id_case1_key();} if(id==7){year=0;week=1;id_case1_key();} } void id_case1_key(void) { if (!UP) { while(!UP)display(); re_disp=0; Set_id(id,1); } } void Set_id(unsigned char sel,unsigned char sel_1) { signed char max,mini,address,item; if(sel==1) {address=hou; max=23;mini=0;} if(sel==2) {address=min; max=59;mini=0;} if(sel==3) {address=sec; max=0;mini=0;} if(sel==4) {address=mou; max=12;mini=1;} if(sel==5) {address=dat; max=31;mini=1;} if(sel==6) {address=yer; max=99;mini=0;} if(sel==7) {address=wek; max=7;mini=1;} leddata=0xff; item=Read1302(address|read)/16*10+Read1302(address|read)%16; if (sel_1==1) item++; if(item>max) item=mini; leddata=0xff; Write1302(0x8e,0x00); Write1302(address,item/10*16+item%10); Write1302(0x8e,0x80); } void main() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; Write1302(0x90,0xa0); if(!SET&!UP)Set1302(inittime); Write1302(0x8e,0x80); while(1) { Scan_Key(); } } |
|
相关推荐
9 个讨论
|
|
|
好像没看到有什么报酬
|
|
|
|
|
|
|
|
|
楼主使用延时做数码管位数多了会遇到问题的,及时解决了也是治标不治本。我提供一个我自己的思路,仅供参考。如下:
|
|
|
|
|
|
|
|
552 浏览 0 评论
706 浏览 0 评论
883 浏览 0 评论
839 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
775 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17069 浏览 31 评论
浏览过的版块 |
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-15 07:35 , Processed in 1.176048 second(s), Total 61, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2117