完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是按键控制键值在lcd1602上显示,为什么在LCD1602液晶上无法显示
#include #include #define uchar unsigned char #define uint unsigned int #define out P0 ***it RS=P2^6; ***it RW=P2^5; ***it E=P2^7; ***it L1=P1^0; ***it L2=P1^1; ***it L3=P1^2; ***it L4=P1^3; uchar dat[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void lcd_initial(void); void check_busy(void); void write_command(uchar com); void write_data(uchar dat); void string(uchar ad,uchar *s); void delay(uint); main() { uchar temp; uchar i; uchar j; while(1) { P1=0xef; for(i=0;i<=3;i++) { if(L1==0) P0=dat[i*4+0]; if(L2==0) P0=dat[i*4+1]; if(L3==0) P0=dat[i*4+2]; if(L4==0) P0=dat[i*4+3]; delay(500); temp=P1; temp=temp | 0x0f; temp=temp <<1; temp=temp | 0x0f; P1=temp; } for(j=1;j<=16;j++) { lcd_initial(); if(P0==dat[1]) { string(0x85,"frequency"); string(0xc3,"0"); } else if(P0==dat[2]) { string(0x85,"phase"); string(0xc3,"1"); } else if(P0==dat[3]) { string(0x85,"amplitude"); string(0xc3,"2"); } else if(P0==dat[4]) string(0xc3,"3"); else if(P0==dat[5]) string(0xc3,"4"); else if(P0==dat[6]) string(0xc3,"5"); else if(P0==dat[7]) string(0xc3,"6"); else if(P0==dat[8]) string(0xc3,"7"); else if(P0==dat[9]) string(0xc3,"8"); else if(P0==dat[10]) string(0xc3,"9"); else if(P0==dat[11]) string(0xc3,"A"); else if(P0==dat[12]) string(0xc3,"B"); else if(P0==dat[13]) string(0xc3,"C"); else if(P0==dat[14]) string(0xc3,"D"); else if(P0==dat[15]) string(0xc3,"E"); else if(P0==dat[16]) string(0xc3,"F"); } } } void delay(uint j) { uchar i=250; for(;j>0;j--) { while(--i); i=249; while(--i); i=250; } } /******************************************************************************* * 函 数 名 : check-busy * 函数功能 : 检查忙标志函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void check_busy(void) { uchar dt; do { dt=0xff; E=0; RS=0; RW=1; E=1; dt=out; }while(dt&0x80); E=0; } /******************************************************************************* * 函 数 名 : LcdWriteCom * 函数功能 : 写命令函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void write_command(uchar com) { check_busy(); E=0; RS=0; RW=0; out=com; E=1; delay(5); E=0; } void write_data(uchar dat) { check_busy(); E=0; RS=1; RW=0; out=dat; E=1; delay(5); E=0; } /******************************************************************************* * 函 数 名 : LcdInit() * 函数功能 : 初始化LCD屏 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void lcd_initial() //LCD初始化 { write_command(0x38); write_command(0x0C); write_command(0x06); write_command(0x01); delay(1); } void string(uchar ad,uchar *s) { write_command(ad); while(*s>0) { write_data(*s++); delay(100); } } |
|
相关推荐
2个回答
|
|
最好再找一个1602的例程对比一下,看你的程序感觉1602部分是移植过来的,但是又没理解好原程序的思路。
1602的初始化只需要在上电后执行一次就可以了,并不需要在程序里重复执行。 P0口作为1602的数据口,却不时的被赋值dat[],完全可以另外定义一个变量来使用。 调试可以先单独调试显示部分,显示部分正确了,在加入按键部分 |
|
|
|
你不使用按键时,可不可以显示,还是加上按键后的问题
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNK210使用指南 -CanMV版 V1.0》第八章 CanMV IDE初体验
458 浏览 0 评论
过采样提高12位ADC精度在STM32主控上的实现(附电路及代码)
570 浏览 0 评论
飞凌嵌入式-ELFBOARD 解决PCB布线时无法捕捉到焊盘中心的问题
878 浏览 0 评论
Openharmony软件评估指南-米尔瑞芯微RK3568开发板
1322 浏览 0 评论
STM32CUBEMX(7)--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压
1226 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11104 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-15 22:21 , Processed in 1.655262 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号