LCD鏄剧ず鐨勭琛ㄥ崟鐗囨満璇剧▼璁捐 - 鐧惧害鏂囧簱 联系客服

发布时间 : 星期六 文章LCD鏄剧ず鐨勭琛ㄥ崟鐗囨満璇剧▼璁捐 - 鐧惧害鏂囧簱更新完毕开始阅读6c1ca30f8f9951e79b89680203d8ce2f006665b9

芜湖职业技术学院 信息工程系

初始化函数;第二个是调用LCD的显示位置函数;第三个是调用LCD写数据函数;第四个是调用LCD指定行上显示字符串函数。

Sbit K1=P1^0, sbit K2=P2^1,sbit BEEP=3^0, sbit LCD_RS=P2^0, sbit LCD_RW=P2^1, sbit LCD_EN=P2^2;皆为个函数接口声明,定义K1、K2为两个控制开关;定义BEEP为扬声器接口;RS为寄存器选择高电平(1)时选择数据寄存器、低电平(0)时选择指令寄存器;RS为读写信号,高电平(1)时惊醒读操作,低电平(0)时进行写操作;E(或EN)端为使能端(enable),将单片机与LCD1602显示器连接。

Uchar KeyCount=0 ;KeyCount为按键计数变量,用于累计按键的次数。定义其为无符号整型,并且付初值为0.

uchar code msg1[]={\Watch 0 \,uchar code msg2[]={\;定义两个一维数组,在protues仿真软件中,当按下play键后,1602LCD显示屏是会出现这两个数组中的字符。

uchar code Prompts[][16]= {

{\ {\ {\ {\

21

芜湖职业技术学院 信息工程系

}

定义一个二维数组,将其中的一维显示于1602LCD上。K1为启停控制按钮,第一次按下时开始计数,显示“::1--? ”;当第二次按下时停止计数,显示\;……

uchar Time_Buffer[] ={0,0,0,0},uchar LCD_Display_Buffer[] ={\定义两个数组,一个用于计时缓冲,一个用于显示时间缓冲。 void BeeP() {

uchar i,j=70; for (i=0;i<180;i++) {

while (--j); BEEP=~BEEP; } BEEP=0;

}定义一个调用蜂鸣器的子函数。For(i=0;i<180;i++)用于控制蜂鸣器响的时间,BEEP=~BEEP用于使蜂鸣器进行短暂的响一下又不响的效果。因为蜂鸣器接地,只有当P3.0接入高电平(即1)时,蜂鸣器才工作。所以在响了一声过后,级(执行完成之后)将BEEP赋值为0,让它处于不导通状态,蜂鸣器不响。 void DelayX(uint ms) {

22

芜湖职业技术学院 信息工程系

uchar i;

while(ms--) for (i=0;i<120;i++); }定义一个延时子函数

void Show_Second() {

uchar i;

LCD_Set_POS(0X45); 设置LCD显示起点 for (i=3;i!=0xff;i--) {

将两位整数的1、100s,秒,分,时转换为8位数字字符 LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'0'; LCD_Display_Buffer[2*i]=Time_Buffer[i]+'0'; 在i=3,2,1,0时分别显示时,分,秒,1/100s LCD_Write_Data(LCD_Display_Buffer[2*i+1]); LCD_Write_Data(LCD_Display_Buffer[2*i]); LCD_Write_Data(':'); }定义显示计时函数

} LCD_Set_POS(0X45),调用函数,用于调用设置显示位置函数,在此子函数中又嵌套了一个函数调用LCD_Write_Command(Position|0X80)(LCD_Write_Command(0X45|0X80))函数。 进行或操作:

23

,即

芜湖职业技术学院 信息工程系

45 80 C5 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 1 或操作后得到结果C5,即LCD_Write_Command(0XC5),调用该函数(即向LCD写指令函数)。LCD_Busy_Check()用于检测LCD是否处于忙状态,假如处于忙状态,RS为0(选择指令寄存器),RW为1(进行读操作),EN为1(寄存器使能)。Delay NOP()表示延时四个机器周期。Result=(bit)(P0&0X80),P0的初始状态是FF. 进行与操作: FF 80 80 1 1 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 与操作后得到的结果80,即return为80(10000000)

将EN赋值为0,即寄存器使能端禁止用。返回至LCD写指令子程序,RS=0(选择指令寄存器),RW=0(进行写操作),EN=0(使能端禁止使用)。延时两个机器周期,将cmd(0XC5)的值赋给P0口,延时四个空白机器周期。使能端置1,延时四个空白机器周期。EN=0寄存器禁止使用。

void Time0() interrupt 1 using 0 {

TH0=-10000/256; TL0=-10000%6;

24