本博文的程序功能主要是实现蓝桥杯开发板通过定时器计时来实现时间的显示,实现显示结构为日-时-分-秒。全部程序见上一篇博文,本博文对程序功能进行详细讲解。
首先是系统的初始化功能,系统初始化LED小灯、继电器、蜂鸣器、数码管以及定时器的初始化,有关电路如下所示。
系统的初始化程序为:
void systeminitial()
{
TimeInit(); //定时器中断初始化
HC138(5);P0=0X00; //关闭蜂鸣器、继电器、LED小灯以及数码管
HC138(4);P0=0Xff;
HC138(6);P0=0Xff;
HC138(7);P0=0Xff;
}
开发板通过74HC138进行74HC573的片选,片选程序如下所示:
void HC138(unsigned char channel)
{
switch(channel)
{
case 4:P2=(P2&0x1f)|0x80;break;
case 5:P2=(P2&0x1f)|0xa0;break;
case 6:P2=(P2&0x1f)|0xc0;break;
case 7:P2=(P2&0x1f)|0xe0;break;
}
}
程序中定时器的定时时间设定为1ms,通过STC-ISP软件获得定时器初始化函数如下所示。
void TimeInit() //定时器初始化函数定时时间为ims
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x66; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA = 1;
ET0 = 1;
TR0 = 1;
}
操作方法如下:
到这里,系统初始化就已完成。
函数变量定义与函数声明如下:
#include "reg52.h"
#include "intrins.h"
unsigned char LedChar[] ={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极数码管从0到9的真值
unsigned char LedBuff[] = {
0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //数码管显示缓冲区,初值0xFF确保启动时都不亮
unsigned char flags = 1; //1秒定时标志
unsigned char sec = 0;
unsigned char minutes = 0;
unsigned char hours = 0;
unsigned char days = 0; //定义记录秒,分,时,天的变量
sfr AUXR=0X8E; //NOTES:sbit是位操作,用于将某个sfr中具体位赋值给一个变量
void TimeInit()