微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第27节:在定时中断里动态扫描数码管的程序

第27节:在定时中断里动态扫描数码管的程序

时间:11-22 来源:互联网 点击:

gned int uiDelayLong)

{

unsigned int i;

unsigned int j;

for(i=0;i

{

for(j=0;j<500;j++) //内嵌循环的空指令数量

{

; //一个分号相当于执行一条空语句

}

}

}

void initial_myself() //第一区 初始化单片机

{

led_dr=0; //关闭独立LED灯

beep_dr=1; //用PNP三极管控制蜂鸣器,输出高电平时不叫。

hc595_drive(0x00,0x00); //关闭所有经过另外两个74HC595驱动的LED灯

TMOD=0x01; //设置定时器0为工作方式1

TH0=0xfe; //重装初始值(65535-500)=65035=0xfe0b

TL0=0x0b;

}

void initial_peripheral() //第二区 初始化外围

{

/* 注释五:

* 让数码管显示的内容转移到以下几个变量接口上,方便以后编写更上一层的窗口程序。

* 只要更改以下对应变量的内容,就可以显示你想显示的数字。初学者应该仔细看看display_drive等函数,

* 了解来龙去脉,就可以知道本驱动程序的框架原理了。

*/

ucDigShow8=8; //第8位数码管要显示的内容

ucDigShow7=7; //第7位数码管要显示的内容

ucDigShow6=6; //第6位数码管要显示的内容

ucDigShow5=5; //第5位数码管要显示的内容

ucDigShow4=4; //第4位数码管要显示的内容

ucDigShow3=3; //第3位数码管要显示的内容

ucDigShow2=2; //第2位数码管要显示的内容

ucDigShow1=1; //第1位数码管要显示的内容

ucDigDot8=0;

ucDigDot7=0;

ucDigDot6=0;

ucDigDot5=1; //显示第5位的小数点

ucDigDot4=0;

ucDigDot3=0;

ucDigDot2=0;

ucDigDot1=0;

EA=1; //开总中断

ET0=1; //允许定时中断

TR0=1; //启动定时中断

}

总结陈词:

有的朋友会质疑,很多教科书上说,定时中断函数里面的内容应该越少越好,你把动态驱动数码管的函数放在中断里面,难道不会影响其它任务的执行吗?我的回答是,大部分的小项目都不会影响,只有少数实时性要求非常高的项目会影响,而对于这类项目,我的做法是从一开始设计硬件电路板的时候,就应该放弃用动态扫描数码管的方案,而是应该选数码管专用驱动芯片来实现静态驱动。因为动态扫描数码管本来就不适合应用在实时性非常高的项目。

前面这两节都讲了数码管的驱动程序,要在此基础上,做一些项目中经常遇到的界面应用,我们该怎么写程序?欲知详情,请听下回分解-----数码管通过切换窗口来设置参数。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top