一、驱动数码管
1、硬件设计
数码管实验硬件设计中使用到的数码管是共阳极类型的。因为数码管的片选引脚“1/2/3/4”都通过PNP 三极管来提供高电平,为什么要选用PNP 三极管和共阳极数码管的组合?因为共阳极数码管共阳端直接接电源,不用接上来电阻,而共阴的则要,如此一来共阳极数码管亮度较高。
再者用单片机控制时,单片机上电和复位后所有的I/O 口都是高电平,只要单片机一上电,电路经过数码管的位流向共阴至地,耗电大,不节能,所以又每次编写代码时都得把位控制端赋予低电平,太过麻烦,这样共阳极数码管就是好,因为共阳极端要接电源,而位控制口又是高电平,则数码管不会亮,省去了每次编程赋值的麻烦P0.0~P0.3 作为共阳极数码管的为控制口,P0.4 和P0.5 作为共阳极数码管的字型码输入口。
2、软件设计
软件设计代码:
二、看门狗
使用看门狗的目的就是当单片机程序跑飞时,通过看门狗复位重新使单片机正常工作。那么看门狗主要的功能就是复位,因此每一次看门狗复位就闪烁LED 灯一段时间。那么怎样令看门狗复位呢?很简单,只要初始化看门狗后不喂狗就是了。如果不想LED 闪烁即LED 状态保持不变,就必须在看门狗定时器溢出时间范围内喂狗,即通过按键外部中断进行喂狗操作。
涉及看门狗功能的函数分别是看门狗初始化函数WDTInit 和喂狗操作函数WDTFeed。在WDTInit函数中只有一个赋值操作,就是要对WDT_CONTR 看门狗定时器特殊功能寄存器赋值位0x35,即启动看门狗、看门狗将重新计数、并且预分频值为64。当单片机工作在12MHz 频率下且看门狗定时器预分频值为64,这是看门狗定时器溢出时间为2.0971s,可以从以下公式计算得到。
溢出时间=(12
x 预分频x32768)/当前MCU 工作频率
=12x64x32768/12000000
=2.097152s
喂狗操作函数WDTFeed 实质就是将WDT_CONTR 初值重载,让看门狗定时器重新计数。这个重载操作类似于定时器/计数器重载初值的操作。看门狗的使用,只是提供一种辅助,以防止单片机系统死机。在编写程序没有加进看门狗的情况下,确保程序稳定地执行,不能太依赖看门狗。
看门狗的喂狗操作要及时,否则会造成单片机复位。喂狗操作实质就是将 WDT_CONTR初值重载,让看门狗定时器重新计数。这个重载操作类似于定时器/计数器重载初值的操作。造成单片机工作不稳定的原因有很多:如工作环境温度过冷、过热、电磁辐射干扰严重,程序不稳定等等。在其他类型的单片机中,看门狗定时器能够作真正的定时器来使用,很显然,STC89C52RC单片机内部的看门狗的功能就显得有些单薄。