通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目
- 一、前言
-
- 1、通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目包括用Keil软件编写单片机C语言程序和用Proteus软件仿真单片机外围电路
- 2、通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目构思
-
- (1)、实现什么功能:LCD1602字符型液晶显示器先显示时分秒,在点击移位按键后,停止计时,LCD1602字符型液晶显示器光标闪烁,每次按下移位键,LCD1602字符型液晶显示器光标随每次按下移位键移位到时分秒个位十位处闪烁,当LCD1602字符型液晶显示器的时分秒个位十位有闪烁后,可修改LCD1602字符型液晶显示器的时分秒个位十位闪烁位上的数值,再通过移位按键或启停按键启动或停止计时。
- (2)、如何实现功能:如何让LCD1602字符型液晶显示器先显示时分秒:采用定时器0工作方式1计时,计时得到的数值赋给LCD1602字符型液晶显示器显示时间两位数分解函数进行分解,分解得到的个位数值与十位数值用变量代替分别由LCD1602字符型液晶显示器写指令函数和LCD1602字符型液晶显示器写数据函数写入LCD1602字符型液晶显示器,通过LCD1602字符型液晶显示器显示出来。如何让LCD1602字符型液晶显示器的时分秒个位十位闪烁:采用按键扫描函数扫描,每次按下移位键(此时定时器0停止计时),执行LCD1602字符型液晶显示器光标闪烁指令和LCD1602字符型液晶显示器光标随每次按下移位键移位到时分秒个位十位处闪烁的位置指令。如何修改LCD1602字符型液晶显示器的时分秒个位十位闪烁位数值并在原计时基础上实现计时:当移位键按下后,定时器0停止计时,计时得到的数值采用两位数分解公式(如:shi=num/10,ge=num%10。)进行分解,分解得到的个位数值与十位数值用变量代替写入按键扫描函数,此时也要采用两位数合成公式(如:miao=shi+ge=(num/10)*10+num%10)求出原先的计时数值,用变量代替原先的计时数值写入按键扫描函数(原因:时分秒的个位或十位显示位的数值是在原计时数值上分解得来,当时分秒的个位或十位显示位的数值发生变化后,原计时数值也要变化,否则启动定时器0计时后,LCD1602字符型液晶显示器显示的是原计时时间,而不是修改时分秒的个位或十位显示位的数值后的计时,因此要采用两位数合成公式(miao=shi+ge=(num/10)*10+num%10)求出原先的计时数值,用变量代替原先的计时数值写入按键扫描函数。)。
- 二、通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目的Keil软件编写的单片机C语言程序
- 三、通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目的Proteus软件仿真单片机外围电路
- 四、通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目的操作功能描述
-
-
- (1)、不修改时分秒个位十位数值,只是启动或停止计时的情况:如果第一次按下移位键,则停止计时,启动计时可按下移位键7次或按下启停键,再次停止计时可按下移位键或按下启停键,再次启动计时可按下移位键7次或按下启停键,周而复始。如果第一次按下启停键,则停止计时,启动计时可按下移位键7次或按下启停键,再次停止计时可按下移位键或按下启停键,再次启动计时可按下移位键7次或按下启停键,周而复始。
- (2)、修改时分秒个位十位数值,再启动或停止计时的情况:要修改时分秒个位十位上的数值,再启动或停止计时,首先必须按下移位键,此时停止计时,通过点击移位键让LCD1602字符型液晶显示器光标移到时分秒相应个位十位数值上,利用点击增加键或减少键修改数值,修改完毕后,启动计时可按下移位键多次让LCD1602字符型液晶显示器光标回到秒钟个位数值上或按下启停键,停止计时可按下移位键或按下启停键,当按下移位键时,又可修改时分秒个位十位上的数值,再次启动计时可按下移位键多次让LCD1602字符型液晶显示器光标回到秒钟个位数值上或按下启停键,周而复始。
-
一、前言
1、通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目包括用Keil软件编写单片机C语言程序和用Proteus软件仿真单片机外围电路
2、通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目构思
(1)、实现什么功能:LCD1602字符型液晶显示器先显示时分秒,在点击移位按键后,停止计时,LCD1602字符型液晶显示器光标闪烁,每次按下移位键,LCD1602字符型液晶显示器光标随每次按下移位键移位到时分秒个位十位处闪烁,当LCD1602字符型液晶显示器的时分秒个位十位有闪烁后,可修改LCD1602字符型液晶显示器的时分秒个位十位闪烁位上的数值,再通过移位按键或启停按键启动或停止计时。
(2)、如何实现功能:如何让LCD1602字符型液晶显示器先显示时分秒:采用定时器0工作方式1计时,计时得到的数值赋给LCD1602字符型液晶显示器显示时间两位数分解函数进行分解,分解得到的个位数值与十位数值用变量代替分别由LCD1602字符型液晶显示器写指令函数和LCD1602字符型液晶显示器写数据函数写入LCD1602字符型液晶显示器,通过LCD1602字符型液晶显示器显示出来。如何让LCD1602字符型液晶显示器的时分秒个位十位闪烁:采用按键扫描函数扫描,每次按下移位键(此时定时器0停止计时),执行LCD1602字符型液晶显示器光标闪烁指令和LCD1602字符型液晶显示器光标随每次按下移位键移位到时分秒个位十位处闪烁的位置指令。如何修改LCD1602字符型液晶显示器的时分秒个位十位闪烁位数值并在原计时基础上实现计时:当移位键按下后,定时器0停止计时,计时得到的数值采用两位数分解公式(如:shi=num/10,ge=num%10。)进行分解,分解得到的个位数值与十位数值用变量代替写入按键扫描函数,此时也要采用两位数合成公式(如:miao=shi+ge=(num/10)*10+num%10)求出原先的计时数值,用变量代替原先的计时数值写入按键扫描函数(原因:时分秒的个位或十位显示位的数值是在原计时数值上分解得来,当时分秒的个位或十位显示位的数值发生变化后,原计时数值也要变化,否则启动定时器0计时后,LCD1602字符型液晶显示器显示的是原计时时间,而不是修改时分秒的个位或十位显示位的数值后的计时,因此要采用两位数合成公式(miao=shi+ge=(num/10)*10+num%10)求出原先的计时数值,用变量代替原先的计时数值写入按键扫描函数。)。
二、通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目的Keil软件编写的单片机C语言程序
#include<reg52.h>//单片机头文件
#define uchar unsigned char//宏定义,用uchar表示unsigned char,叫无符号字符型数据类型,取值范围为:0到255。
#define uint unsigned int//宏定义,用uint表示unsigned int,叫无符号整数型数据类型,取值范围为:0到65535。
sbit RS=P0^7;//位定义LCD1602字符型液晶显示器的数据/命令选择引脚
sbit RW=P0^6;//位定义LCD1602字符型液晶显示器的读写引脚
sbit EN=P0^5; //位定义LCD1602字符型液晶显示器的使能引脚
sbit S1=P3^5;//移位按键S1
sbit S2=P3^4;//增加按键S2
sbit S3=P3^3;//减少按键S3
sbit S4=P3^2;//启停按键S4
uchar count,S1num,S4num;//count为定时器0中断次数变量,S1num为移位按键S1按键按下次数变量,S4num为启停按键S4按下次数变量。
uchar shi,fen,miao;//未做时间修改的计时时钟、分钟、秒钟变量
uchar secondge,secondshi; //秒钟个位、十位的变量
uchar minutange,minutanshi;//分钟个位、十位的变量
uchar hourge,hourshi;//时钟个位、十位的变量
uchar table0[]="2019-11-11";//LCD1602字符型液晶显示器第一行初始显示
uchar table1[]="00:00:00";//LCD1602字符型液晶显示器第二行初始显示
void Delay(uint z)//延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void WriteCommand(uchar command)//LCD1602字符型液晶显示器写指令函数
{
RS=0;//LCD1602字符型液晶显示器指令寄存器低电平
RW=0;//LCD1602字符型液晶显示器写指令操作低电平
P2=command;//LCD1602字符型液晶显示器写指令函数写指令到单片机P2组端口,再输送到LCD1602字符型液晶显示器指令寄存器中执行。
Delay(5);//实际单片机演示,可以去掉延时。Proteus 仿真,需要保留延时。
EN=1;//LCD1602字符型液晶显示器使能端高电平
Delay(5);//实际单片机演示,可以去掉延时。Proteus 仿真,需要保留延时。
EN=0;//LCD1602字符型液晶显示器使能端低电平
}
void WriteData(uchar information)//LCD1602字符型液晶显示器写数据函数
{
RS=1;//LCD1602字符型液晶显示器数据寄存器高电平
RW=0;//LCD1602字符型液晶显示器写数据操作低电平
P2=information;//LCD1602字符型液晶显示器写数据函数写数据到单片机P2组端口,再输送到LCD1602字符型液晶显示器上显示。
Delay(5);//实际单片机演示,可以去掉延时。Proteus 仿真,需要保留延时。
EN=1;//LCD1602字符型液晶显示器使能端高电平
Delay(5);//实际单片机演示,可以去掉延时。Proteus 仿真,需要保留延时。
EN=0;//LCD1602字符型液晶显示器使能端低电平
}
void LCD1602Init()//LCD1602初始化函数
{
WriteCommand(0x38);//设置LCD1602字符型液晶显示器16x2显示,5*7或5*8点阵,8位数据并口,简称显模。
WriteCommand(0x08);//设置LCD1602字符型液晶显示器显示开,简称亮屏。
WriteCommand(0x01);//设置清除LCD1602字符型液晶显示器屏上所有内容,并让光标复位到LCD1602字符型液晶显示器屏左上角,简称清屏。
WriteCommand(0x06);//设置开光标(或字符)地址指针自增1,光标右移动一个字符位,整屏显示不移动。
WriteCommand(0x0c);//设置开LCD1602字符型液晶显示器显示,关光标,关光标(字符)闪烁。
}
void Timer0Init()//定时器0初始化函数
{
TMOD=0x01;//设定定时器0工作模式为模式1
TH0=(65536-50000)/256;//TH0装初值
TL0=(65536-50000)%256;//TL0装初值
EA=1;//开启定时器总中断
ET0=1;//开启定时器0中断开关
TR0=1;//启动定时器0
}
void LCD1602InitDisplay()//LCD1602字符型液晶显示器初始化显示函数
{
uchar j;//j表示数组元素个数变量
WriteCommand(0x80+0x00);//LCD1602字符型液晶显示器第一行第一个位置显示
for(j=0;j<10;j++