Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <reg51.h>
- #define keyboard P3
- #define dbport P0
- sbit RS=P2^7;
- sbit RW=P2^6;
- sbit E=P2^5;
- void debouncer();
- unsigned char num[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
- unsigned char scan[4] = {0xef,0xdf,0xbf,0x7f};
- void delay1ms(int);
- void lcd_data(char data1);
- void lcd_cmd(char cmd);
- void init_lcd();
- char line1[]="welcome";
- void main(void)
- {
- unsigned char col,row,press,kcode,key_line2,key_line1,key_count;
- key_count=1;
- key_line2=0xc0;
- key_line1=0x80;
- lcd_cmd(0x3f);
- lcd_cmd(0x0e);
- lcd_cmd(0x01);
- delay1ms(5);
- lcd_cmd(0x80);
- //char *pp;
- while(1)
- {
- for(col=0;col<4;col++)
- {
- keyboard=scan[col];
- press=~keyboard&0x0f;
- if(press!=0)
- {
- debouncer();
- if(press==0x01) row=0;
- else if(press==0x02) row=1;
- else if(press==0x04) row=2;
- else if(press==0x08) row=3;
- kcode=row+4*col;
- while(press!=0)
- press=~keyboard&0x0f;
- debouncer();
- if(key_count==33)
- {
- key_count=1;
- lcd_cmd(0x01);
- delay1ms(5);
- if(key_count<=16)
- {
- lcd_cmd(key_line1);
- lcd_data(num[kcode]);
- key_line1=key_line1+0x01;
- if(key_count==16)key_line1=0x80;
- }
- else if((key_count<=32)&&(key_count>=17))
- {
- lcd_cmd(key_line2);
- lcd_data(num[kcode]);
- key_line2=key_line2+0x01;
- if(key_count==32) key_line2=0xc0;
- }
- }
- else
- {
- if(key_count<=16)
- {
- lcd_cmd(key_line1);
- lcd_data(num[kcode]);
- key_line1=key_line1+0x01;
- if(key_count==16)key_line1=0x80;
- }
- else if((key_count<=32)&&(key_count>=17))
- {
- lcd_cmd(key_line2);
- lcd_data(num[kcode]);
- key_line2=key_line2+0x01;
- if(key_count==32) key_line2=0xc0;
- }
- }
- key_count=key_count+1;
- }
- }
- }
- }
- void delay1ms(int x)
- {
- int i, j;
- for(i=0;i<x;i++)
- for(j=0;j<114;j++);
- }
- void debouncer()
- {
- delay1ms(20);
- }
- void lcd_data(char data1)
- {
- char i;
- dbport=data1;
- RS=1;RW=0;E=1;
- for(i=0;i<40;i++)
- RS=1;RW=0;E=0;
- }
- void lcd_cmd(char cmd)
- {
- char i;
- dbport=cmd;
- RS=0;RW=0;E=1;
- for(i=0;i<40;i++)
- RS=0;RW=0;E=0;
- }
- void init_lcd()
- {
- lcd_data(0x30);
- lcd_data(0x30);
- lcd_data(0x30);
- lcd_data(0x38);
- lcd_data(0x08);
- lcd_data(0x01);
- lcd_data(0x06);
- lcd_data(0x0c);
- }
Advertisement
Add Comment
Please, Sign In to add comment