杭州电子科技大学电子设计(A)实验设计报告实验名称1键盘扫描与LCD显示实验次数1小组号26姓名学号潘瑞东07042222姓名学号姓名学号指导教师黄继业2009年3月17日键盘扫描与LCD显示一.方案论证与比较方案一:矩阵键盘有一组I/O口控制,LCD输入数据端口直接与单片机的一组I/O口连接。此方案的设备比较简单,接线也简单,程序简洁。但缺点是所占的I/O资源比较多,实际操作性不强。方案二:矩阵键盘由一组I/O口控制,使用两块74HC595芯片,实现串行输出,转换并行输出,节约了I/O口,提高了单片机的可操作性。通过在KEIL中用C语言编写HEX文件,控制1602液晶显示屏。二.总体方案设计三.理论分析和计算根据原理图可知,P0.0—P0.7口控制矩阵键盘,P1.0-P1.2作为第一块595芯片的输入,其中P1.0接入SH_CP,P1.1接入ST_CP,P1.2接入1602LCD键盘单片机74HC595LCD矩阵键盘STCDS,其输出的Q4,Q5,Q6输出口分别控制LCD的RS,RW,E.P1.3-P1.5作为第二块595芯片的输入,其输出端Q0-Q7分别控制LCD的对应的数据口。键盘扫描原理:先复位使行线输出口全为0,给高四位低电平,使其处于列线读取状态。然后判断低四位电平状况,如果没有键被按下,则表示没有键被按下,如果有键按下的话,行线和列线的交点处就会被导通,就会出现电平变化。74HC595工作原理:595是串入并出带有锁存功能移位寄存器,Q0-Q7为并行数据输出;Q7-Q9为串行数据输出;MR10主复位(低电平);SHCP11移位寄存器时钟输入;STCP12存储寄存器时钟输入;OE13输出有效(低电平);DS14串行数据输入。四.软硬件的系统设计本实验只要检测LCD是否在在显示屏的第一行出现“HelloWorld”.在显示屏的第二行显示所按的键,并在数码管中显示相应位置。五.测试本实验最终测试结果实现了4*4矩阵键盘扫描,并实现了通过键盘控制在1602lcd和数码管上显示数字。在LCD显示屏的第一行出现“HelloWorld”.在显示屏的第二行显示所按的键,并在数码管中显示相应位置。六.总结1、通过本次实验,使本人初步掌握了通过C语言,实现单片机控制的基本操作,诸如流水灯,液晶显示控制,键盘扫描。知道了通过查阅PDF技术文档,解决实验中碰到的问题。2、通过本次实验,提高了我们组的协同合作能力。参考文献:[1]EN_TC1602PDF,74HC595PDF[2]51单片机C语言常用模块与综合系统设计实例精讲(第二版)电子工业出版社附:#include#defineuintunsignedint#defineucharunsignedcharucharcodetable2[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e'};ucharcodeled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharcodetable[]="HelloWorld!";ucharcodetable3[]="Thekeyis";ucharnum,temp,key,num1,num2,num3;sbitsh_cp_1=P1^3;//sh-cpsbitst_cp_1=P1^4;//st-cpsbitDAT_1=P1^5;//DSsbitsh_cp_2=P1^0;//sh-cpsbitst_cp_2=P1^1;//st-cpsbitDAT_2=P1^2;//DSvoiddelay(unsignedcharz)//延时程序{unsignedintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidsend_1(uchara)//595给1602发数据控制流水灯{ucharc;for(c=0;c<8;c++){sh_cp_1=0;DAT_1=a&0x80;a=a<<1;sh_cp_1=1;}st_cp_1=0;st_cp_1=1;}voidsend_2(uchara)//595给1602发数据控制数码管{ucharc;for(c=0;c<8;c++){sh_cp_2=0;DAT_2=a&0x80;a=a<<1;sh_cp_2=1;}st_cp_2=0;st_cp_2=1;}voidshumaguan(ucharj,uchari)//第1个选择送入的地址,0x01,0x02,0x03,0x04,第2个选择显示的数字{ucharh;if(j==0x01){h==0x0e;}elseif(j==0x02){h=0x0d;}elseif(j==0x03){h=0x0b;}elseif(j==0x04){h=0x07;}send_2(h);send_1(i);}voidwrite_cmd(unsignedcharcmd)//1602显示控制{//send_2(0xef);//rs=0;send_2(0x8f);//rw=0;delay(5);send_1(cmd);//P0=cmd;send_2(0xcf);//e=1;delay(5);send_2(0x8f);//e=0;}voidwrite_date(unsignedchardate)//1602写数据{send_2(0x3f);//;rs=1;0011send_1(date);//P0=date;delay(5);send_2(0xdf);//e=1;1101delay(5);send_2(0x3f);//e=0;0011}voidinit()//1602初始化程序{send_2(0x3f);//e=0;write_cmd(0x38);write_cmd(0x0e);write...