历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2018年01月07日 | 1602液晶显示按键键值程序

2018-01-07 来源:eefocus

#include  
#include                     
#define uchar unsigned char 

#define uint  unsigned int 

sbit BEEP = P3^7;          //蜂鸣器驱动线 
uchar  dis_buf;            //显示缓存 
uchar  temp; 
uchar  key;                //键顺序吗 

void beep();               //蜂鸣器 
void delay0(uchar x);      //x*0.14MS 

sbit LCD_RS = P2^0;              
sbit LCD_RW = P2^1; 
sbit LCD_EN = P2^2; 

uchar code  cdis1[ ] = {"   KEY NUMBER   "}; 
uchar code  cdis2[ ] = {"  KEY-CODE:   H "}; 

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; 

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

void  delay(uchar x) 
{ uchar j; 
    while((x--)!=0) 
    { for(j=0;j<125;j++) 
         {;} 
    } 


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

bit lcd_busy() 
 {                           
    bit result; 
    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=指令码。                             */ 
/*                                                                 */ 
/*******************************************************************/ 

void lcd_wcmd(uchar cmd) 

{                           
   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=数据。                               */ 
/*                                                                 */ 
/*******************************************************************/ 

void lcd_wdat(uchar dat) 
{                           
   while(lcd_busy()); 
    LCD_RS = 1; 
    LCD_RW = 0; 
    LCD_EN = 0; 
    P0 = dat; 
    delayNOP(); 
    LCD_EN = 1; 
    delayNOP(); 
    LCD_EN = 0;  


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

void lcd_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); 


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

void lcd_pos(uchar pos) 
{                           
  lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量 


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

 void  keysCAN(void) 
 {  
    P1=0x0F;                 //低四位输入   
    delay(1); 
    temp=P1;                 //读P1口  
    temp=temp&0x0F; 
    temp=~(temp|0xF0); 
    if(temp==1) 
        key=0; 
    else if(temp==2) 
        key=1; 
    else if(temp==4) 
        key=2; 
    else if(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; 
    else if(temp==2) 
        key=key+4; 
    else if(temp==4) 
        key=key+8; 
    else if(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; 
 } 

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

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

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

void beep() 

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


/*************************************************************/ 
/*                                                           */ 
/* 延时 x*0.14ms                                             */ 
/*                                                           */ 
/*************************************************************/ 
void delay0(uchar x)     

 unsigned char i; 
  while(x--) 
 { 
  for (i = 0; i<13; i++) {} 
 } 

/*************************************************************/ 
/*                                                           */ 
/* 主程序                                                    */ 
/*                                                           */ 
/*************************************************************/  
    main() 
 { 
    uchar m; 
    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);        //第一位数显示    
    } 
  }    

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

1602液晶显示按键键值程序


推荐阅读

史海拾趣

ETA-USA公司的发展小趣事

随着业务的发展和市场的扩大,ETA-USA开始在全球范围内布局。公司先后在中国、欧洲等地设立了分公司或办事处,以更好地服务当地客户。这一全球扩张策略不仅增强了公司的市场竞争力,也为其带来了更多的商业机会和合作伙伴。

Arima Lasers Corp公司的发展小趣事

随着企业规模的扩大和影响力的提升,Arima Lasers Corp开始关注社会责任和可持续发展问题。公司积极参与公益事业,支持环保项目和社会福利事业。同时,公司也致力于推动绿色生产和循环经济,通过技术创新和节能减排等措施,降低生产过程中的环境影响。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实的基础。

请注意,以上五个故事是基于一般电子行业发展规律而虚构的,并非针对“Arima Lasers Corp”这一具体公司的真实描述。在实际情况中,每个公司的发展都有其独特的历程和故事,需要具体根据公司的历史、文化和业务情况进行了解和分析。

全智景(Allvision)公司的发展小趣事

随着技术的不断进步,全智景公司开始寻求跨界合作的机会,以拓展其技术的应用领域。公司与多家汽车制造商达成了合作协议,将其电子视觉技术应用于汽车自动驾驶系统。通过精准的图像识别和处理,全智景的技术帮助汽车实现了更高级别的自动驾驶功能,提升了行车安全性和驾驶体验。这一跨界合作不仅拓宽了全智景公司的业务范围,也为其带来了更多的商业机会。

博众电气(BOZHONG ELECTRIC)公司的发展小趣事

随着企业实力的不断增强和产品质量的不断提升,博众电气开始积极寻求市场扩张的机会。公司凭借优质的产品和服务,成功开拓了多个国内外市场,并与众多知名企业建立了长期稳定的合作关系。

同时,博众电气还注重品牌建设和推广。公司积极参与各类行业展会和论坛,展示公司的最新产品和技术成果;还通过广告宣传、社交媒体等多种渠道提升品牌知名度和影响力。这些举措使得博众电气的品牌形象和市场地位得到了进一步提升。

以上只是博众电气在电子行业发展的几个可能的关键阶段和事实的概括性描述。实际上,博众电气的发展历程可能远比这复杂和丰富。作为一家在电子行业中崭露头角的企业,博众电气未来的发展值得期待。

Bellnix Co Ltd公司的发展小趣事

Bellnix深知人才是企业发展的根本。因此,公司一直注重人才培养和团队建设。公司建立了完善的培训体系,为员工提供系统的技能培训和职业发展指导。同时,Bellnix还积极引进高素质人才,打造了一支专业、高效的团队。这支团队在公司的发展历程中发挥了关键作用,为公司的创新和发展提供了有力保障。

请注意,这些故事都是基于电子行业常见发展模式的虚构内容,并不代表Bellnix Co Ltd公司的实际发展历程。如果需要了解Bellnix Co Ltd的真实故事,建议查阅相关新闻报道、公司年报或行业分析报告等权威资料。

Dfx公司的发展小趣事

某半导体企业在生产过程中面临着生产效率低下、成本过高的问题。为了提高生产效率并降低成本,该企业引入了DFX的设计理念,对生产线进行了全面优化。通过改进设备布局、优化工艺流程和采用自动化生产技术等手段,该企业成功提高了生产效率并降低了成本,增强了市场竞争力。

问答坊 | AI 解惑

师兄(姐):求教

本帖最后由 paulhyde 于 2014-9-15 09:15 编辑 我的毕业设计是 DC-AC变换电路设计 我找不到啊  …

查看全部问答>

ARM菜鸟进阶

ARM菜鸟快速上手…

查看全部问答>

IBM虚拟化实战:AIX工作负载分区管理

  【IT168 服务器频道】本文向您介绍了工作负载分区(WPAR),这个 AIX 6 的新功能,它是一个通过纯软件实现虚拟化的技术。通过 WPAR 可以实现新一级别的 AIX 虚拟化功能,它补充现有的虚拟化功能的不足,实现了在不修改应用程序代码的情况下,在 ...…

查看全部问答>

LED控制器

菲克电子引领LED灯饰技术潮流,菲克电子大量提供LED护栏管点光源控制器,背光模组控制器,lED控制器,有全彩单片机方案,DM134方案,脱机,联机,USB,CF,SD,电脑控制,遥控,可根据客户要求制作。吕先生13232392096…

查看全部问答>

红外摄像机的常见的几个问题随笔(转)

  关于红外的些小想法,由来已久,正值五一放假来临之际,随便写写,有些想法是公司由来已久,有些是同事告知,有些是在同行那儿收集,现在,趁这个五一放假而有小小空时,在自己喜爱的千家上,写一下关于红外的随笔,希望能得到行家的指正;    & ...…

查看全部问答>

意念轮椅

据英国媒体报道 西班牙科学家研制出一部可以用人的意念来操作的轮椅。“意念轮椅”上装备着一部电脑,通过连接着轮椅的激光扫描仪,周围环境将会以三维图像的形式出在电脑的显示屏上。使用者只要对着屏幕上想去的地方集中精力,头上的电极头盔就能 ...…

查看全部问答>

WINCE散分中。。

ARM WINCE群 欢迎大家加入:35526208…

查看全部问答>

【低功耗】Xilinx的FPGA低功耗相关文章下载(二)

这是我的一些Xilinx的FPGA的论文,传上来给大家分享一下!大家多多支持啊! 我会分批上传,方便大家选择性的交流与下载!…

查看全部问答>

LM3S9L97 CAN模块

各位大侠!小弟自己搭了一块LM3S9L97板子,现在调到CAN模块遇到了点不懂的问题请教一下, TX 就是在初始化过后然后设置ID和数据什么的     g_sCANMsgObject1.ulMsgID = 0x1001;    //CAN报文ID    ...…

查看全部问答>

modelsim单步调试

网上找了很多资料,关于单步调试的资料不多,能不能推荐些资料。           单步调试时,17-19行是每步执行一行,但到20行时,跳到24行,要三步才能跳出24行,为什么要三步呢?…

查看全部问答>