能够控制矩阵键盘以后,我就直接改代码控制8X8的键盘,用P1和P3口
1 void keyscan() 2 { 3 uchar tmp; 4 P1 = 0xff; 5 P3 = 0x00; 6 delay(5); 7 tmp = P1^0xff; 8 9 //blink(); 10 //delay(500); 11 12 switch(tmp){ 13 case 1: 14 now_num = 0; 15 break; 16 case 2: 17 now_num = 1; 18 break; 19 case 4: 20 now_num = 2; 21 break; 22 case 8: 23 now_num = 3; 24 break; 25 case 16: 26 now_num = 4; 27 break; 28 case 32: 29 now_num = 5; 30 break; 31 case 64: 32 now_num = 6; 33 break; 34 case 128: 35 now_num = 7; 36 break; 37 default: 38 now_num = 44; 39 } 40 41 P1 = 0x00; 42 P3 = 0xff; 43 delay(5); 44 tmp = P3^0xff; 45 switch(tmp){ 46 case 1: 47 now_num += 56; 48 break; 49 case 2: 50 now_num += 48; 51 break; 52 case 4: 53 now_num += 40; 54 break; 55 case 8: 56 now_num += 32; 57 break; 58 case 16: 59 now_num += 24; 60 break; 61 case 32: 62 now_num += 16; 63 break; 64 case 64: 65 now_num += 8; 66 break; 67 case 128: 68 now_num += 0; 69 break; 70 } 71 } 72 73 void show() 74 { 75 if(pre_num != now_num) 76 { 77 display_seg(now_num); 78 pre_num = now_num; 79 } 80 display_seg(now_num); 81 //delay(100); 82 } 83 84 //主函数 85 void main() 86 { 87 int i = 0; 88 int j = 0; 89 90 P0 = 0xff; 91 P2 = 0; 92 init(); 93 TR1 = 1; 94 95 cnt = 00; 96 while(1) 97 { 98 P1 = 0x00; 99 P3 = 0xff; 100 101 if(P3 != 0xff)keyscan(); 102 show(); 103 } 104 }
差不多就开始做LCD1062显示字符串的功能了。首先画protues电路图
然后在工程里面添加一个LCD1062.c的文件,代码如下:
1 /*************** LCD1062.c ******************/ 2 #include "common.h" 3 4 sbit RS = P2^0; 5 sbit RW = P2^1; 6 sbit EN = P2^2; 7 8 void Delayms(uint ms) 9 { 10 uchar i; 11 while(ms--) 12 { 13 for(i=0;i<120;i++); 14 } 15 } 16 17 uchar Busy_Check() 18 { 19 uchar LCD_Status; 20 RS = 0; 21 RW = 1; 22 EN = 1; 23 Delayms(1); 24 LCD_Status = P0; 25 EN = 0; 26 return LCD_Status; 27 } 28 29 void Write_LCD_Command(uchar cmd) 30 { 31 while((Busy_Check()&0x80)==0x80); 32 RS = 0; 33 RW = 0; 34 EN = 0; 35 P0 = cmd; 36 EN = 1; 37 Delayms(1); 38 EN = 0; 39 } 40 41 void Write_LCD_Data(uchar dat) 42 { 43 while((Busy_Check()&0x80)==0x80); 44 RS = 1; 45 RW = 0; 46 EN = 0; 47 P0 = dat; 48 EN = 1; 49 Delayms(1); 50 EN = 0; 51 } 52 53 void Initialize_LCD() 54 { 55 Write_LCD_Command(0x38); 56 Delayms(1); 57 Write_LCD_Command(0x01); 58 Delayms(1); 59 Write_LCD_Command(0x06); 60 Delayms(1); 61 Write_LCD_Command(0x0c); 62 Delayms(1); 63 } 64 65 void ShowString(uchar x,uchar y,uchar *str) 66 { 67 uchar i = 0; 68 if(y == 0) 69 Write_LCD_Command(0x80 | x); 70 if(y == 1) 71 Write_LCD_Command(0xc0 | x); 72 for(i=0;i<16;i++) 73 { 74 Write_LCD_Data(str[i]); 75 } 76 }
代码的意思我也没细看,是直接从单片机100个例子里面摘抄的,要看明白可能还得了解LCD1062的一些指令,总之调用函数
ShowString(uchar x,uchar y,uchar *str) 大概的意思:第一个参数是***(过些日子再看看)第二个参数是行号,第三个参数是显示的字符串,基本上就能够调用函数让LCD屏显示数据了。
准备用C51做个学生管理系统(2)
时间: 2024-10-05 21:08:39