目录
- 前言:
- 本代码涉及的主要知识:
- 代码(实验板实现代码):
前言:
设计本代码的主要目的是为了完成期末作业,即在液晶显示屏上显示、时间、日期、温度,以及用按键控制时间、温度的显示。总的来说就是对前面学习计数的糅合,本代码实现的是显示时间,并能在实验板上成功显示。
本代码涉及的主要知识:
1.液晶显示屏模块应用
主要是学会如何在液晶显示屏上显示内容
2.T1中断函数的使用
主要通过T1中断函数记录时间,即通过每次的溢出参产生中断来记录秒的变化。
3.通过数组记录时、分、秒,再通过%
、/
来取值显示
代码(实验板实现代码):
#include<reg52.h>
unsigned char code table[]="0123456789:-";
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
unsigned char count = 0;
unsigned char time[] = {23, 58, 50};//初始时间
void delay(unsigned int x){//延时函数
unsigned int i;
for (i=x; i>0;i--);
}
void write_com (unsigned char com){//写指令函数
P0= com;
RS=0;RW=0;EN=1;
delay(200);
EN=0;
}
void write_date(unsigned char dat) {//写数据函数
P0 = dat;
RS=1;RW=0;EN=1;
delay (200);
EN=0;
}
void init(){//初始化
write_com(0x01);
write_com(0x38);
write_com(0x0f);
write_com(0x06);
}
timer1() interrupt 3{//T1中断函数
TH1 = 0x3C;
TL1 = 0xB0;
count = count + 1;
if(count == 20){
count = 0;
time[2] = time[2] + 1;
if(time[2] >= 60){
time[2] = 0;
time[1] = time[1] + 1;
if(time[1] >= 60){
time[1] = 0;
time[0] = time[0] + 1;
if(time[0] >= 24){
time[0] = 0;
}
}
}
}
}
void dispaly(){//显示时间函数
init();
write_com(0x80);
write_date(table[time[0] / 10]);
delay(3000);
write_date(table[time[0] % 10]);
delay(3000);
write_date(table[10]);
delay(3000);
write_date(table[time[1] / 10]);
delay(3000);
write_date(table[time[1] % 10]);
delay(3000);
write_date(table[10]);
delay(3000);
write_date(table[time[2] / 10]);
delay(3000);
write_date(table[time[2] % 10]);
delay(3000);
write_com(0x02);
}
void intpt_begin(){//开中断
TMOD = 0x10;
TH1 = 0x3C;
TL1 = 0xB0;
EA = 1;
ET1 = 1;
TR1 = 1;
}
void main()
{
intpt_begin();
while(1){
dispaly();
}
}
后续的显示日期和显示时间的原理大致相同,添加按键也无非多用几个引脚,难点主要是温度显示,后续有时间学习一下。