完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
代码贴出来如下,逻辑无错误,加载到板子也能正常显示,但是中断器无法正常工作。
#include #include"ds1302.h" ***it alARM=P3^4; ***it wei=P3^5; //调整位 ***it add=P3^6; //增加键 ***it stop=P3^7; //暂停键 ***it dula=P2^6; //数码管段显 ***it wela=P2^7; //数码管位显 ***it beep=P2^3; //喇叭 unsigned char a=0; unsigned char code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管 void delay(unsigned char i) ; // 延迟 void ShowClock(unsigned char h,unsigned char m,unsigned char s); //显示闹钟 void ShowDate(unsigned char year,unsigned char mon,unsigned char day); void ShowSecond(unsigned char sec); void ShowMinute(unsigned char min); void ShowHour(unsigned char hour); void ShowDay(unsigned char day); void ShowMonth(unsigned char mon); void ShowYear(unsigned char year); void main() { unsigned char alarm_hour=12,alarm_minute=0,alarm_second=10,fen1=0,miao1=0,haomiao=10; char flag_time=0; //flag_time=0,显示clock flag_time=1,显示日期 bit flag_add=0; //按下加按钮标志 bit flag_stop=0; //按下秒表暂停键标志 bit flag_alarm=0; //按下闹钟键标志 bit flag_reset=0; //按下秒表复位标志 bit flag_start=0; //按下秒表开始标志 char change=0; //change=0显示时分秒 change=1显示年月日 change=2显示秒表 change=3只显示秒 change=4只显示分 //change=5只显示时 change=6只显示日 change=7只显示月 change=8只显示年 EA=1; ET0=1; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; Ds1302_Write_Time(); while(1) { Ds1302_Read_Time(); if(time_buf1[5]==0&&time_buf1[6]==0) //整点报时 { beep=0; delay(100); beep=1; } if(time_buf1[4]==alarm_hour&&time_buf1[5]==alarm_minute&&time_buf1[6]==alarm_second) //闹钟判断 { beep=0; delay(100); beep=1; } switch(change) { case 0: if(!flag_alarm) ShowClock(time_buf1[4],time_buf1[5],time_buf1[6]); //显示时分秒 else ShowClock(alarm_hour,alarm_minute,alarm_second); //显示闹钟时分秒 break; case 1: ShowDate(time_buf1[1],time_buf1[2],time_buf1[3]); //显示年月日 break; case 2: if(a==2) { a=0; if(haomiao==100) { haomiao=0;miao1++; if(miao1==60) { miao1=0;fen1++; if(fen1==60) fen1=0; } } haomiao++; } if(flag_start) { TR0=1; flag_start=0; } if(flag_stop) { TR0=0; flag_stop=0; } if(flag_reset) { fen1=miao1=haomiao=0; TR0=0; flag_reset=0; } ShowClock(fen1,miao1,haomiao); break; case 3: //只显示秒 if(flag_alarm==0&&flag_add==1) //判断是时钟add还是闹钟add { time_buf1[6]+=1; time_buf1[6]%=60; Ds1302_Write_Time(); } if(flag_alarm==1&&flag_add==1) { alarm_second+=1; alarm_second%=60; } if(flag_alarm) //选择显示时钟还是闹钟 { ShowSecond(alarm_second); } else { ShowSecond(time_buf1[6]); Ds1302_Write_Time(); } flag_add=0; break; case 4: //只显示分 if(flag_alarm==0&&flag_add==1) { time_buf1[5]+=1; time_buf1[5]%=60; Ds1302_Write_Time(); } if(flag_alarm==1&&flag_add==1) { alarm_minute+=1; alarm_minute%=60; } if(flag_alarm) { ShowMinute(alarm_minute); } else { ShowMinute(time_buf1[5]); } flag_add=0; break; case 5: //只显示时 if(flag_alarm==0&&flag_add==1) { time_buf1[4]+=1; time_buf1[4]%=60; Ds1302_Write_Time(); } if(flag_alarm==1&&flag_add==1) { alarm_hour+=1; alarm_hour%=60; } if(flag_alarm) { ShowHour(alarm_hour); } else { ShowHour(time_buf1[4]); } flag_add=0; break; case 6: if(flag_add) { time_buf1[3]+=1; time_buf1[3]%=32; Ds1302_Write_Time(); flag_add=0; } ShowDay(time_buf1[3]); //只显示日 break; case 7: if(flag_add) { time_buf1[2]+=1; time_buf1[2]%=12; Ds1302_Write_Time(); flag_add=0; } ShowMonth(time_buf1[2]); //只显示月 break; case 8: if(flag_add) { time_buf1[1]+=1; time_buf1[1]%=100; Ds1302_Write_Time(); flag_add=0; } ShowYear(time_buf1[1]); //只显示年 break; default:; } if(alarm==0) //按下闹钟键 { delay(10); while(alarm==0); //不松手操作 { flag_alarm=~flag_alarm; flag_reset=1; } } if(wei==0) //根据位数进行每位的显示 { delay(10); if(wei==0) { while(wei==0) { Ds1302_Read_Time(); } change++; if(change>8) change=0; } } if(add==0) { delay(10); while(add==0) { Ds1302_Read_Time(); } flag_add=1; flag_start=1; } if(stop==0) { delay(5); while(stop==0) { flag_stop=1; } } if(time_buf1[5]==0&&time_buf1[6]==0) //整点报时 { beep=0; delay(100); beep=1; } } } void ShowClock(unsigned char h,unsigned char m,unsigned char s) //显示时分秒 { P0=0x00; dula=1; P0=smg[h/10]; dula=0; P0=0xfe; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[h%10]; dula=0; P0=0xfd; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[m/10]; dula=0; P0=0xfb; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[m%10]; dula=0; P0=0xf7; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[s/10]; dula=0; P0=0xef; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[s%10]; dula=0; P0=0xdf; wela=1; wela=0; delay(2); } void ShowDate(unsigned char year,unsigned char mon,unsigned char day) //显示年月日 { P0=0x00; dula=1; P0=smg[year/10]; dula=0; P0=0xfe; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[year%10]; dula=0; P0=0xfd; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[mon/10]; dula=0; P0=0xfb; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[mon%10]; dula=0; P0=0xf7; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[day/10]; dula=0; P0=0xef; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[day%10]; dula=0; P0=0xdf; wela=1; wela=0; delay(2); } void ShowSecond(unsigned char s) //单独显示秒 { P0=0x00; dula=1; P0=smg[s/10]; dula=0; P0=0xef; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[s%10]; dula=0; P0=0xdf; wela=1; wela=0; delay(2); } void ShowMinute(unsigned char m) //单独显示分 { P0=0x00; dula=1; P0=smg[m/10]; dula=0; P0=0xfb; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[m%10]; dula=0; P0=0xf7; wela=1; wela=0; delay(2); } void ShowHour(unsigned char h) //单独显示时 { P0=0x00; dula=1; P0=smg[h/10]; dula=0; P0=0xfe; wela=1; wela=0; delay(2); P0=0x00; dula=1; P0=smg[h%10]; dula=0; P0=0xfd; wela=1; wela=0; delay(2); } void ShowDay(unsigned char day) //单独显示日 { ShowSecond(day); } void ShowMonth(unsigned char mon) //单独显示月 { ShowMinute(mon); } void ShowYear(unsigned char year) //单独显示年 { ShowHour(year); } void delay(unsigned char i) //延迟函数 { unsigned char j; while(i--)for(j=0;j<115;j++); } void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++; } |
|
相关推荐
1个回答
|
|
在线等,急求大神解答,想不明白,逻辑什么的都没错。
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
669 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
597 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1048 浏览 1 评论
731 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
520 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
158浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
120浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
123浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
122浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
163浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:28 , Processed in 0.739597 second(s), Total 48, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号