RenHao

LCD_51

Dec 10th, 2013
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.36 KB | None | 0 0
  1. #include <reg51.h>
  2. #define keyboard  P3
  3. #define dbport P0
  4. sbit RS=P2^7;
  5. sbit RW=P2^6;
  6. sbit E=P2^5;
  7.  
  8. void debouncer();
  9. unsigned char num[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};  
  10. unsigned char scan[4] = {0xef,0xdf,0xbf,0x7f};
  11. void delay1ms(int);
  12. void lcd_data(char data1);
  13. void lcd_cmd(char cmd);
  14. void init_lcd();
  15. char line1[]="welcome";
  16. void main(void)
  17. {
  18.     unsigned char col,row,press,kcode,key_line2,key_line1,key_count;
  19.     key_count=1;
  20.     key_line2=0xc0;
  21.     key_line1=0x80;
  22.     lcd_cmd(0x3f);
  23.     lcd_cmd(0x0e);
  24.     lcd_cmd(0x01);
  25.     delay1ms(5);
  26.     lcd_cmd(0x80);
  27.     //char *pp;
  28.     while(1)
  29.     {
  30.         for(col=0;col<4;col++)
  31.         {
  32.             keyboard=scan[col];
  33.             press=~keyboard&0x0f;
  34.             if(press!=0)
  35.             {
  36.                 debouncer();
  37.                 if(press==0x01) row=0; 
  38.                 else if(press==0x02) row=1;
  39.                 else if(press==0x04) row=2;
  40.                 else if(press==0x08) row=3;
  41.                 kcode=row+4*col;
  42.                 while(press!=0)
  43.                     press=~keyboard&0x0f;
  44.                 debouncer();
  45.  
  46.                 if(key_count==33)
  47.                 {
  48.                     key_count=1;
  49.                     lcd_cmd(0x01);
  50.                     delay1ms(5);
  51.                     if(key_count<=16)
  52.                     {
  53.                     lcd_cmd(key_line1);
  54.                     lcd_data(num[kcode]);
  55.                     key_line1=key_line1+0x01;
  56.                         if(key_count==16)key_line1=0x80;
  57.                     }
  58.                     else if((key_count<=32)&&(key_count>=17))
  59.                     {
  60.                     lcd_cmd(key_line2);
  61.                     lcd_data(num[kcode]);
  62.                     key_line2=key_line2+0x01;
  63.                        
  64.                         if(key_count==32) key_line2=0xc0;
  65.                     }  
  66.                 }
  67.                 else
  68.                 {
  69.                     if(key_count<=16)
  70.                     {
  71.                     lcd_cmd(key_line1);
  72.                     lcd_data(num[kcode]);
  73.                     key_line1=key_line1+0x01;
  74.                         if(key_count==16)key_line1=0x80;
  75.                     }
  76.                     else if((key_count<=32)&&(key_count>=17))
  77.                     {
  78.                     lcd_cmd(key_line2);
  79.                     lcd_data(num[kcode]);
  80.                     key_line2=key_line2+0x01;
  81.                        
  82.                         if(key_count==32) key_line2=0xc0;
  83.                     }
  84.                 }
  85.                 key_count=key_count+1; 
  86.             }
  87.            
  88.    
  89.         }
  90.     }
  91.        
  92. }
  93. void delay1ms(int x)
  94. {
  95.     int i, j;
  96.     for(i=0;i<x;i++)
  97.         for(j=0;j<114;j++);
  98. }
  99. void debouncer()
  100. {
  101.     delay1ms(20);
  102. }
  103. void lcd_data(char data1)
  104. {
  105.     char i;
  106.     dbport=data1;
  107.     RS=1;RW=0;E=1;
  108.     for(i=0;i<40;i++)
  109.     RS=1;RW=0;E=0;
  110. }
  111. void lcd_cmd(char cmd)
  112. {
  113.     char i;
  114.     dbport=cmd;
  115.     RS=0;RW=0;E=1;
  116.     for(i=0;i<40;i++)
  117.     RS=0;RW=0;E=0;
  118. }
  119. void init_lcd()
  120. {
  121.     lcd_data(0x30);
  122.     lcd_data(0x30);
  123.     lcd_data(0x30);
  124.     lcd_data(0x38);
  125.     lcd_data(0x08);
  126.     lcd_data(0x01);
  127.     lcd_data(0x06);
  128.     lcd_data(0x0c);
  129. }
Advertisement
Add Comment
Please, Sign In to add comment