用定时器做延时的数码管时间显示

上传人:ji****72 文档编号:35794076 上传时间:2018-03-20 格式:DOCX 页数:7 大小:165.12KB
返回 下载 相关 举报
用定时器做延时的数码管时间显示_第1页
第1页 / 共7页
用定时器做延时的数码管时间显示_第2页
第2页 / 共7页
用定时器做延时的数码管时间显示_第3页
第3页 / 共7页
用定时器做延时的数码管时间显示_第4页
第4页 / 共7页
用定时器做延时的数码管时间显示_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《用定时器做延时的数码管时间显示》由会员分享,可在线阅读,更多相关《用定时器做延时的数码管时间显示(7页珍藏版)》请在金锄头文库上搜索。

1、 /*本程序实现了用数码管显示时间的功能,时间计数和现实基本一致(这取决于定时器精 度和指令时间) 。该程序提供了一种用定时器延时实现传统 delay 的显示方法,后面给出比较。文档最后有该程序对应的原理图,大部分开发板都能直接用这个程序,稍微改下 IO 口即 可。如有错误之处请包涵,此篇文档仅作交流之用。*/ /*-定时器方法-*/ #include/*-全局变量定义区-*/sbit duan_xuan=P26; /数码管显示控制 I/Osbit wei_xuan=P27;unsigned char minute = 0; /分钟的变量,20*60 次 timer0 中断unsigned c

2、har hour = 0;unsigned char i_num_timer0; /定时器中断次数unsigned char i_num_timer1;unsigned char disp_min1,disp_min2,disp_hour1,disp_hour2;/分解后的数值变量unsigned char wei = 1;/用来标记显示哪个数码管unsigned short uc50ms = 0; /记录 time0 中断次数,此程序用两个变量记录 time0 中断次数/*-定义数码管显示的数字-*/unsigned char code duan_table=0x3f,0x06,0x5b,0

3、x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /*-函数声明段-*/void ini_program(); void disp_time(); /显示时间void current_time(); /记录小时,分钟变量 / void breakdown_time(uint hour,uint minute);/分解数值,送数码管分别显示 /-void main()ini_program();while(1)current_time(); / breakdown_time(hour,minute);disp_min

4、1=minute%10;disp_min2=minute/10;disp_hour1=hour%10;disp_hour2=hour/10; / disp_time(); /-void ini_program() /初始化 duan_xuan=0;wei_xuan=0; /重置 I/O 状态TMOD=0x11; /定时器 0+定时器 1,设定方式 1TH1=(65536-1834)/256;TL1=(65536-1834)%256; /2ms 触发一次中断 TH0=(65536-45872)/256;TL0=(65536-45872)%256; /50ms 触发一次中断EA=1; ET0=1;

5、 ET1=1;TR0=1; TR1=1; /* void breakdown_time(uint hour,uint minute)disp_min1=minute%10;disp_min2=minute/10;disp_hour1=hour%10;disp_hour2=hour/10; */ void disp_time() switch (wei)case 1 :duan_xuan=1;P0=duan_tabledisp_min1;duan_xuan=0;P0=0xff; /消影wei_xuan=1;P0=0xef; /选通 wei5wei_xuan=0;break; /case 2: d

6、uan_xuan=1;P0=duan_tabledisp_min2;duan_xuan=0; wei_xuan=1;P0=0xf7; /选通 wei4wei_xuan=0;break; /case 3:if(i_num_timer0=20)i_num_timer0=0;duan_xuan=1;P0=0x40; /显示一横杠duan_xuan=0;P0=0xff; /消影wei_xuan=1;P0=0xfb; /选通 wei3wei_xuan=0; break; /case 4:duan_xuan=1;P0=duan_tabledisp_hour1; duan_xuan=0;P0=0xff; /

7、消影wei_xuan=1;P0=0xfd; /选通 wei2wei_xuan=0;break; /case 5:duan_xuan=1;P0=duan_tabledisp_hour2;duan_xuan=0;P0=0xff; /消影wei_xuan=1;P0=0xfe; /选通 wei1wei_xuan=0;break; void current_time() if(uc50ms=1200)/此处用=也可以minute+;uc50ms=0;if(minute=60)hour+;minute=0;if(hour=24)hour=0;minute=0; /*-添加中断函数-*/void TIME1

8、() interrupt 3 TH1=(65536-1834)/256;TL1=(65536-1834)%256; /2ms wei+; if(wei=6) wei=1; disp_time(); /disp_time()放在这里比放在主函数中的效果要好 void TIME0() interrupt 1 TH0=(65536-45872)/256; /50ms TL0=(65536-45872)%256; i_num_timer0+; uc50ms+;/*/ /*/ /*-传统 delay 方法-*/#include#define uchar unsigned char#define uint

9、 unsigned int/*-全局变量定义区-*/sbit duan_xuan=P26; /数码管显示控制 I/Osbit wei_xuan=P27;uint minute; /分钟的变量,20*60 次 timer0 中断uint hour;uint i_num_timer0; /定时器中断次数uint i_num_timer1;uint disp_min1,disp_min2,disp_hour1,disp_hour2;/*-定义数码管显示的数字-*/uchar code duan_table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x

10、6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /显示+显示控制/*-函数声明段-*/void ini_program();void disp_time(); /显示时间void delayms(uint s);void current_time();/记录小时+分钟变量void breakdown_time(uint hour,uint minute);/分解数值,送数码管分别显示/- void main() ini_program();while(1) current_time();breakdown_time(hour,minute); disp_time();voi

11、d ini_program() /初始化 duan_xuan=0; wei_xuan=0; /重置 I/O 状态 hour=10; minute=49; TMOD=0x11; /定时器 0+定时器 1,设定方式 1 TH0=(65536-45872)/256; TL0=(65536-45872)%256; /50ms 触发一次中断 TH1=(65536-45872)/256; TL1=(65536-45872)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; void delayms(uint s) /延时函数 uint i,j; for(i=s;i0;i-)fo

12、r(j=110;j0;j-);void breakdown_time(uint hour,uint minute)disp_min1=minute%10;disp_min2=minute/10;disp_hour1=hour%10;disp_hour2=hour/10;void disp_time() duan_xuan=1;P0=duan_tabledisp_min1;duan_xuan=0;P0=0xff; /消影wei_xuan=1;P0=0xef; /选通 wei5wei_xuan=0;delayms(2); /duan_xuan=1;P0=duan_tabledisp_min2;du

13、an_xuan=0;wei_xuan=1;P0=0xf7; /选通 wei4wei_xuan=0;delayms(2); /if(i_num_timer1=20) i_num_timer1=0; duan_xuan=1; P0=0x40; /显示一横杠 duan_xuan=0; P0=0xff; /消影 wei_xuan=1; P0=0xfb; /选通 wei3 wei_xuan=0; delayms(2); /duan_xuan=1;P0=duan_tabledisp_hour1;duan_xuan=0;P0=0xff; /消影wei_xuan=1;P0=0xfd; /选通 wei2wei_xuan=0;delayms(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号