您现在的位置: 主页 > MCU > 单片机技术应用 > 1602液晶显示按键键值程序 -
本文所属标签:
为本文创立个标签吧:

1602液晶显示按键键值程序 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]
#include#include #defineucharunsignedchar#defineuintunsignedintsbitBEEP=P3^7;//蜂鸣器驱动线uchardis_buf;//显示缓存uchartemp;ucharkey;//键顺序吗voidbeep();//蜂鸣器voiddelay0(ucharx

#include
#include
#defineucharunsignedchar

本文引用地址: http://www.21ic.com/app/mcu/201806/764905.htm

#defineuintunsignedint

sbitBEEP=P3^7;//蜂鸣器驱动线
uchardis_buf;//显示缓存
uchartemp;
ucharkey;//键顺序吗

voidbeep();//蜂鸣器
voiddelay0(ucharx);//x*0.14MS

sbitLCD_RS=P2^0;
sbitLCD_RW=P2^1;
sbitLCD_EN=P2^2;

ucharcodecdis1[]={"KEYNUMBER"};
ucharcodecdis2[]={"KEY-CODE:H"};

#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};

/*************************************************************/
/**/
/*延时子程序*/
/**/
/*************************************************************/

voiddelay(ucharx)
{ucharj;
while((x--)!=0)
{for(j=0;j<125;j++)
{;}
}
}

/*************************************************************/
/**/
/*检查LCD忙状态*/
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据*/
/**/
/*************************************************************/

bitlcd_busy()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&0x80);
LCD_EN=0;
return(result);
}

/*******************************************************************/
/**/
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。*/
/**/
/*******************************************************************/

voidlcd_wcmd(ucharcmd)

{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}

/*******************************************************************/
/**/
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。*/
/**/
/*******************************************************************/

voidlcd_wdat(uchardat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}

/*************************************************************/
/**/
/*LCD初始化设定*/
/**/
/*************************************************************/

voidlcd_init()
{
delay(15);
lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据
delay(5);
lcd_wcmd(0x38);
delay(5);
lcd_wcmd(0x38);
delay(5);

lcd_wcmd(0x0c);//显示开,关光标
delay(5);
lcd_wcmd(0x06);//移动光标
delay(5);
lcd_wcmd(0x01);//清除LCD的显示内容
delay(5);
}

/*************************************************************/
/**/
/*设定显示位置*/
/**/
/*************************************************************/

voidlcd_pos(ucharpos)
{
lcd_wcmd(pos|0x80);//数据指针=80+地址变量
}

/*************************************************************/
/**/
/*键扫描子程序*/
/**/
/*************************************************************/

voidkeysCAN(void)
{
P1=0x0F;//低四位输入
delay(1);
temp=P1;//读P1口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==1)
key=0;
elseif(temp==2)
key=1;
elseif(temp==4)
key=2;
elseif(temp==8)
key=3;
else
key=16;

P1=0xF0;//高四位输入
delay(1);
temp=P1;//读P1口
temp=temp&0xF0;
temp=~((temp>>4)|0xF0);
if(temp==1)
key=key+0;
elseif(temp==2)
key=key+4;
elseif(temp==4)
key=key+8;
elseif(temp==8)
key=key+12;
else
key=16;

dis_buf=key;//键值入显示缓存
dis_buf=dis_buf&0x0f;

if(dis_buf>9)//转换为ASCII码
dis_buf=dis_buf+0x37;
else
dis_buf=dis_buf+0x30;
}

/*************************************************************/
/**/
/*判断键是否按下*/
/**/
/*************************************************************/

voidkeydown(void)
{
P1=0xF0;
if(P1!=0xF0)
{
keyscan();
beep();
}
}

/*************************************************************/
/**/
/*蜂鸣器响一声*/
/**/
/*************************************************************/

voidbeep()
{
unsignedchari;
for(i=0;i<100;i++)
{
delay0(4);
BEEP=!BEEP;//BEEP取反
}
BEEP=1;//关闭蜂鸣器
delay(250);//延时
}

/*************************************************************/
/**/
/*延时x*0.14ms*/
/**/
/*************************************************************/
voiddelay0(ucharx)
{
unsignedchari;
while(x--)
{
for(i=0;i<13;i++){}
}
}
/*************************************************************/
/**/
/*主程序*/
/**/
/*************************************************************/
main()
{
ucharm;
P0=0xFF;//置P0口
P2=0xFF;//置P2口
delay(10);//延时
lcd_init();//初始化LCD

lcd_pos(0);//设置显示位置为第一行的第1个字符
m=0;
while(cdis1[m]!=’\0’)
{//显示字符
lcd_wdat(cdis1[m]);
m++;
}

lcd_pos(0x40);//设置显示位置为第二行第1个字符
m=0;
while(cdis2[m]!=’\0’)
{
lcd_wdat(cdis2[m]);//显示字符
m++;
}
dis_buf=0x2d;//显示字符"-"

while(1)
{
keydown();
lcd_pos(0x4c);
lcd_wdat(dis_buf);//第一位数显示
}
}

/************************************************************/



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > 1602液晶显示按键键值程序 -
 

"1602液晶显示按键键值程序 -"的相关文章

网站地图

围观()