原创 1602应用

2008-5-6 09:20 2079 7 7 分类: MCU/ 嵌入式

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={"KEY NUMBER"} ;
uchar code table1[]={"KEY-CODE: H"} ;
sbit LCD_RS = P2^0;            
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
sbit BEEP = P3^7 ;          //蜂鸣器驱动线
uchar num,dis_buf,key,temp;
void  keydown(void);
void  keyscan(void);
void beep() ;                    //蜂鸣器


void delay(uint z)  
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}


void delay0(uchar x)     //蜂鸣器延时程序
 
{
  unsigned char i ;
  while(x--)
 {
  for (i = 0;i<13;i++) {}
 }
}


void write_com(uchar com)  //写指令数据到LCD
{
 LCD_RS=0;
 LCD_RW=0;
 P0=com;
 delay(5);
 LCD_EN=1;
 delay(5);
 LCD_EN=0;
 
}


void write_data(uchar date)  //写显示数据到LCD                                                   
{
 LCD_RS=1;
 LCD_RW=0;
 P0=date;
 delay(5);
 LCD_EN=1;
 delay(5); 
 LCD_EN=0;
 
}
void init()    //初始化
{
 LCD_EN =0; 
 write_com(0x38);
 write_com(0x0c);
 write_com(0x06);
 write_com(0x01);


}
void main()
{
 init();
 write_com(0x80+0x03);
    for(num=0;num<10;num++)
    {
     write_data(table[num]);
  delay(20);
 }
 
 write_com(0x80+0x42);
 for(num=0;num<11;num++)
 {
  write_data(table1[num]);
  delay(20);
 }
  dis_buf = 0x2d ;          //显示字符"-"
 while(1)
   { keydown();
    write_com(0x80+0x4b) ;  
     write_data(dis_buf) ;                 //显示的数字  
  }
}


void  keydown(void)
 { 
    P1=0xF0;
  if(P1!=0xF0)
  {
     keyscan();
   beep();
    }
 }
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 beep()    //蜂鸣器驱动
{
   unsigned char i ;
  for (i=0;i<100;i++)
   {
    delay0(4) ;
    BEEP=!BEEP ;       //BEEP取反
   }
    BEEP=1 ;           //关闭蜂鸣器
    delay(250) ;       //延时    
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条