基于定时器的八位数字显示器

描述

使用定时器中断动态显示8位数码管。基于定时器的八位数字显示器实验电路如图所示。

中断

分析:要动态显示8位数码管,其数据的刷新频率应不低于50Hz(0.02S),也就是说每位数据的刷新时间应小于2.5ms(0.02S/8)。使用定时器T1以定时1ms,当定时器溢出中断时,刷新数据位。其程序在结构上可分为三大部分:主函数等、定时器中断服务函数、初始化函数。下面依次介绍各个部分。

1.主函数等

主函数前面这部分程序主要包括基本的IO口定义、全局变量定义、头文件包含、函数声明等。主函数首先调用初始化函数,对各个资源进行初始化操作,然后等待中断发生。

#defineuser_test//测试用typedefunsignedcharuint8;typedefunsignedshortintuint16; uint8 LED_Code_buf[8]; uint8 Disply_temp; sfr LED_Date=0xa0;//user P2voidmain(void){Int_Initialize();Other_Initialize();while(1) { } }

2.定时器T1中断服务函数

定时器T1中断服务函数主要是刷新显示数据位,根据条件每次刷新一位数码管。

//8位数码管动态显示voidTimer1(void) interrupt 3using1{//1ms 刷新1次TH1=(65536-1000)/256; TL1=(65536-1000)%256;switch(Disply_temp++) {case0: LED_Date=LED_Code_buf[0];//显示高位break;case1: LED_Date=LED_Code_buf[1];break;case2: LED_Date=LED_Code_buf[2];break;case3: LED_Date=LED_Code_buf[3];break;case4: LED_Date=LED_Code_buf[4];break;case5:LED_Date=LED_Code_buf[5];break;case6: LED_Date=LED_Code_buf[6];break;case7: LED_Date=LED_Code_buf[7];//显示低位break;default: Disply_temp=0;break; } }

3.初始化函数

初始化函数包括中断初始化函数和其它资源的初始化函数。中断初始化函数配置了中断的触发方式,是否允许中断等操作。其它资源初始化函数主要配置开机显示的字符。

voidInt_Initialize(void){ TMOD|=0x10;//T1计数模式,方式1//1ms 刷新1次 12MHz晶振TH1=(65536-1000)/256; TL1=(65536-1000)%256; EA=1; ET1=1; TR1=1; }//其它初始化函数voidOther_Initialize(void){//显示87654321LED_Code_buf[0]=0x08;//最高位处理LED_Code_buf[1]=0x17; LED_Code_buf[2]=0x26; LED_Code_buf[3]=0x35; LED_Code_buf[4]=0x44; LED_Code_buf[5]=0x53; LED_Code_buf[6]=0x62; LED_Code_buf[7]=0x71; }
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分