完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/*==========================================================
* 开发人员:laowang * 当前版本:V1.0 * 创建时间:11/21/2013 * 修改时间: * 功能说明:用定时器中断实现数码管的动态扫描,大家可以对比用普通的delay()函数来实现动态扫描有什么区别 *==========================================================*/ #include ***it dula = P3^4; //段选 ***it wela = P3^5; //位选 unsigned char num1; //定义一个变量,用来对定时器中断进行计数 unsigned char code table1[]= //数码管(共阴)的段选编码,范围是0-F { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 }; unsigned char code table2[]= //数码管的位选编码,范围是1-8 { 0xfe,0xfd,0xfb,0xf7, //例如,0xfe=1111 1110 点亮第一个数码管 0xef,0xdf,0xbf,0x7f }; /*========================================================== *函数名称:Init() *功 能:对定时器进行初始化 *入口参数: *出口参数: *说 明:定时器0,工作方式为1 *==========================================================*/ void Init() { TMOD = 0x01; // 定时器工作方式为1 TH0 = 63536/256; //赋初值,此处设定的中断时间为2ms,(65536-2000)/256 TL0 = 63536%256; EA = 1; //开总中断 ET0 = 1; //打开定时器0中断 TR0 = 1; //开启定时器 } //主函数 void main() { Init(); //初始化 while(1); //程序一直在空循环,如果有中断发生,则去执行中断(进行数码管显示), //平时执行空循环 } /*========================================================== *函数名称:timer0() *功 能:定时器中断服务内容 *入口参数: *出口参数: *说 明: *==========================================================*/ void Timer0() interrupt 1 //中断序号为1 { TH0 = 63536/256; //每次中断发生后,先进行赋初值 TL0 = 63536%256; //以下部分为数码管的显示部分 P1=table1[num1+1]; //段选信号,将这一语句放在前面有消影的作用 dula=1; dula=0; P1=table2[num1]; //位选信号 wela=1; wela=0; num1++; //对定时器的中断进行计数,每中断一次,数码管更换一次内容 if(num1==8) num1=0; } 评分 |
|
相关推荐
7 个讨论
|
|
这个程序短了很多
|
|
|
|
|
|
但是占用了一个定时器
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 15:58 , Processed in 0.789243 second(s), Total 67, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号