完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
要在1602显示屏显示数字0-9 常用符号
程序有两个不知名程序, 本来想用13号键选择数字模块,11号键光标左移,12右移,16键选择符号 1-9号键控制0-9数字和符号之类的 选择数字或符号模块时什么也没输出!!求解 #include"reg52.h" #define uint unsigned int #define uchar unsigned char /*LCD端口定义*/ ***it RS=P3^7; ***it RW=P3^6; ***it E=P3^5; sfr LCDData=0x80; sfr keyport=0xa0;//键盘端口定义// uchar key; uint q=0x80;//左右移位变量 void Delay(uint i) //延时 { while(i--); } /*液晶驱动程序*/ void Write_Instruction(uchar x) //字节命令 { Delay(1000); E=0; RW=0; RS=0; LCDData=x; E=1; Delay(20); E=0; } void Write_Data(uchar x) //字节数据写入数据 { Delay(1000); E=0; RW=0; RS=1; E=1; LCDData=x; E=0; } void C1S(void) //清屏 { Write_Instruction(0x01); } void InitLCD(void) //初始化 {Write_Instruction(0x38); Delay(200); Write_Instruction(0x0e); Delay(200); Write_Instruction(0x06); Delay(200); } void Write_String(uchar x,uchar*p) //字符串写入 { Write_Instruction(x); while(*p!=0x00) { Write_Data(*p); p++; if(x++==0x8f) {Write_Instruction(0xc0); }}} /*行列式键盘驱动程序*/ bit ReadKey(void) //Reakey { bit dat; keyport=0xf0; //键盘口高四位列线为1,低四位行线为0 if(keyport==0xf0) { dat=0;//没有按键按下 } else { dat=1; //当前有按键按下 } return(dat); } uchar IdentifyKey(void) //键盘驱动程序 { uchar i=1,j=0xfe,m; while(j!=0x7f) { keyport=j; m=keyport&0xf0; switch(m) { case 0xe0: { i=i+0; j=0x7f; break; } case 0xd0: {i=i+4; j=0x7f; break; } case 0xb0: {i=i+8; j=0x7f; break; } case 0x70: { i=i+12; j=0x7f; break; } default: { i=i+1; j=(j<<1)+1; break; } } } return(i); } /*键盘与与液晶驱动应用 */ //显示按键结果程序 //i:1602液晶屏上的显示地址 //k:按键编号,1-16 void DisplayKey(uchar i,uchar k) { Write_Instruction(i); Write_Data(k); } void left () //左移 { Write_Instruction(0x10); q--; if(q+1==0xc0) { q=0x8f; Write_Instruction(0x8f); } } void right () //右移 { Write_Instruction(0x14); q++; if(q-1==0x8f) { q=0xc0 ; Write_Instruction(0xc0); }} void DisplayKey_point (void) //数字模块 { 放 if(ReadKey())//如果没有按键按下,则直接退出 { key=IdentifyKey();//识别按键编号 while(ReadKey());//等待按键释放 } if(key==1){DisplayKey(q,0x31);} if(key==2){DisplayKey(q,0x32);} if(key==3){DisplayKey(q,0x33);} if(key==4){DisplayKey(q,0x34);} if(key==5){DisplayKey(q,0x35);} if(key==6){DisplayKey(q,0x36);} if(key==7){DisplayKey(q,0x37);} if(key==8){DisplayKey(q,0x38);} if(key==9){DisplayKey(q,0x39);} if(key==10){DisplayKey(q,0x30);} } void DisplayKey_symbol (void) //符号模块 { if(ReadKey())//如果没有按键按下,则直接退出 { key=IdentifyKey();//识别按键编号 while(ReadKey());//等待按键释放 } if(key==1){DisplayKey(q,0x21);} if(key==2){DisplayKey(q,0x2c);} if(key==3){DisplayKey(q,0x2e);} if(key==4){DisplayKey(q,0x28);} } //扫描键盘程序 void ScanKey(void) { if(ReadKey())//如果没有按键按下,则直接退出 { key=IdentifyKey();//识别按键编号 while(ReadKey());//等待按键释放 if(key==11) //左移 { left(); } if(key==12) //右移 { right(); } if (key==13) //选择数字模块 { DisplayKey_point(); } if (key==16) //选择字符模块 { DisplayKey_symbol(); } }} /*主程序*/ void main(void) { C1S(); InitLCD();//初始化液晶 while(1) { ScanKey(); Delay(0xffff); }} |
|
相关推荐
5个回答
|
|
等大神
|
|
|
|
|
|
{:soso_e135:}{:soso_e134:}
|
|
|
|
程序太长,没时间看,先测试按键是否响应,响应按键后送个信号或显个数出来,一步一步的找原因
|
|
|
|
程序太长没时间看,不过我觉得,你是不是试着软件延时去抖动看看。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
726 浏览 0 评论
777 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
680 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1149 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1120 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11801 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 11:02 , Processed in 0.707427 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号