当前位置:首页 > 单片机 > 单片机
[导读] #include#include #defineucharunsignedchar#defineuintunsignedintsbitBEEP=P3^7;//蜂鸣器驱动线uchardis_buf;//显示缓存uchartemp;ucharkey;//键顺序吗voidbeep();//蜂鸣器voiddelay0(ucharx

#include
#include
#defineucharunsignedchar

#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]!=’’)
{//显示字符
lcd_wdat(cdis1[m]);
m++;
}

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

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

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭