新建工程
打开软件
LCD1602模块代码添加
因为我们在LCD1602上显示时钟,因此我们需要添加LCD1602的模块代码
跳转到这条博客51单片机学习之旅------模块化编程集_51单片机ruminant-CSDN博客,复制相关代码
跳转到这条博客51单片机学习之旅------模块化编程集_51单片机ruminant-CSDN博客,复制相关代码
定时器0模块代码添加
本次项目在LCD1602上显示时钟,要用到定时器中断,因此我们下来添加定时器中断模块代码跳转到这条博客51单片机学习之旅------模块化编程集_51单片机ruminant-CSDN博客,复制相关代码
跳转到这条博客51单片机学习之旅------模块化编程集_51单片机ruminant-CSDN博客,复制相关代码
main.c文件代码:
#include <REGX52.H>
#include "LCD1602.h"//头文件的作用是声明,我这里要用到啥啥啥
#include "timer0.h"//让程序知道到哪里去找,相当于"任意门"
unsigned char s=0,m=0,h=0;//s秒m分钟h小时
void main()//键盘Insert键会让输入竖线变下划线
{
//初始化
LCD_Init();//LCD1602屏幕初始化
Timer0_Init();//定时器0初始化
//不用实时更新的部分
LCD_ShowString(1,1,"Clock:");//从第一行第一列开始显示Clock:
LCD_ShowString(2,1," : :");//从第二行第一列开始显示 : :
while(1)//需要实时更新的部分写在循环里
{
LCD_ShowNum(2,1,h,2);//从第二行第一列开始以两位宽显示变量h
LCD_ShowNum(2,4,m,2);//从第二行第四列开始以两位宽显示变量m
LCD_ShowNum(2,7,s,2);//从第二行第七列开始以两位宽显示变量s
}
}
void Timer0_Routine() interrupt 1//定时器0中断函数
{
static unsigned int T0Count;//累计1秒
TL0=0x18;//定时器0配置的是01模式1:16位不重载模式,且单片机是12MHz,12T分频
TH0=0XFC;//所以TL0=(65536-1000)%256,TH0=(65536-1000)/256
T0Count++;
if(T0Count==1000)//如果时间够1秒
{
T0Count=0;//归零重新计数
s++;//秒累加1s++等同于s=s+1
}
if(s==60)
{
s=0;//满60秒进位1分钟,秒归零重新累加
m++;
}
if(m==60)
{
m=0;//满60分钟进位1小时,分钟归零重新累加
h++;
}
if(h==24)
{
h=0;//一天24个小时
}
}