1、2、说说把显示程序放在主程序和定时中断程序的优缺点。答:显示程序放在主程序时会一直占用空间执行,但执行速度比较快显示程序放在中断程序是通过中断服务程序中被调用而执行的,每中断一次调用一次,故执行耗时间。附录1.用定时器编写一个秒计时器运行32秒后(左秒数位,右毫秒位):#includereg52.h#define DISP_NULL 10#define LED_NUM 8char DispBuf8;unsigned int mSec=0,Sec=0;unsigned char DispPot=0;unsigned char code LEDCODE=0x3f,0x06,0x5B,0x4F,0x
2、66,0x6D,0x7d,0x07,0x7F,0x6F,0x00;void DispFlash(void) P3=0xff; /将所有数码管都置为不亮 P2=LEDCODEDispBufDispPot; /送该数码管的数据 P3=(1=LED_NUM) DispPot=0; /指针轮换void SysInit(void) TMOD=0x01; /设置定时器0为方式1 TR0=1; /启动定时器0进行计数 ET0=1; /开启定时器0中断功能 EA=1; /开启总中断void Printf_NUM(void) DispBuf7=mSec%10; DispBuf6=(mSec/10)%10; Di
3、spBuf5=mSec/100; DispBuf4=DISP_NULL; DispBuf3=DISP_NULL; DispBuf2=Sec%10; DispBuf1=(Sec/10)%10; DispBuf0=Sec/100;/主函数void main() SysInit(); /初始化 while(1) Printf_NUM(); / 将这个数的每一位分解到显示缓冲区 #define FRE 12000000.0 /系统时钟频率#define INC_TIME (1000000/(FRE/12) /每个计时时钟的周期时间,采用12分频,单位微妙#define NEED_TIME(TIME)
4、(65535-(unsigned int)(TIME/INC_TIME) /计时TIME时间需要多少个计数个数#define COUNT_T(TIME) TL0=NEED_TIME(TIME);TH0=NEED_TIME(TIME)8 /定时时间预置给高,低位8位的THO TLOvoid Time0Int(void) interrupt 1 COUNT_T(1000); /给定时器赋需要定时的时间初值 单位微妙 DispFlash(); /进行数码管显示刷新 mSec+ ; if( mSec= 1000 ) /毫秒与秒的进制 mSec= 0, Sec+ ; 2.在实验程序基础上编写一个24小时
5、计时时钟运行状态:#include #define DISP_NULL 10 / 显示为空#define DISP_EQU 11 / 显示等号#define LED_NUM 8 / 共有8个数码管 / 显示缓冲区unsigned int mSec= 0; / 毫秒unsigned char Sec= 52, Min= 59, Hour= 12; / 秒,分,时/*函数:FlashDisp,该函数实现动态显示的一次刷新-入口:无出口:*/unsigned char DispPot=0 ; / 数码管动态扫描指针unsigned char code LEDCODE=0x3f,0x06,0x5B,0
6、x4F,0x66,0x6D,0x7d,0x07,0x7F,0x6F,0x00,0x48 ;void DispFlash( void ) P3= 0xff ; / 将所有数码管都置为不亮 P2= LEDCODEDispBufDispPot; / 送该数码管的数据 P3= (1= LED_NUM ) DispPot= 0 ; / 指针轮换PntNum,将一个数转成显示的格式void PntNum( void ) DispBuf7= Sec%10; DispBuf6= Sec/10; DispBuf5= DISP_EQU; DispBuf4= Min%10; DispBuf3= Min/10; Di
7、spBuf2= DISP_EQU; DispBuf1= Hour%10; DispBuf0= Hour/10;/* 函数:定时器0初始配置 功能:1000uS中断一回,对毫秒变量和秒变量进行进位操作*/void SysInit( void ) TMOD= 0x01 ; / 设置定时器0为方式1 TR0= 1 ; / 启动定时器0进行记数 ET0= 1 ; / 开启定时器0中断功能 EA= 1 ; / 开启总中断main,系统主函数void main( ) SysInit( ); while( 1 ) PntNum( ); / 将这个数的每一位分解到显示缓冲区/#define FRE 11059
8、200.0 / 系统时钟频率#define FRE 12000000.0 / 系统时钟频率#define INC_TIME (1000000/(FRE/12) / 每个计时时钟的周期时间,采用12分频,单位微秒#define NEED_TIME(TIME) (65536-(unsigned int)(TIME/INC_TIME) / 计时TIME时间需要多少个 计数个数#define COUNT_T(TIME) TL0= NEED_TIME(TIME); TH0= NEED_TIME(TIME)8 / 定时时间预置值给高、低位8位的 TH0 TL0定时器0中断程序2000uS中断一回,对毫秒变量和秒变量进行进位操作void Time0Int( void ) interrupt 1 COUNT_T(2000) ; / 给定时器赋需要定时的时间初值(单位微秒) DispFlash( ) ; / 进行数码管显示刷新 / 以下进行时间调整 mSec+ ; if( mSec 500 ) return ; / 如果没有到需要调整的值,退出 if( Sec 60 ) return ; Sec= 0; Min+ ; if( Min= 24 ) Hour= 0; 教师评阅:成绩:注:老师如已阅,方便的话能否通知!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1