完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
LCD1602突然只能显示数字,不能显示字母,显示字母突然出错。跪求大神解释原因:#include "C8051F120.h"
#include"stdio.h" #define uchar unsigned char #define uint unsigned int ***it LCD_RS = P2^0; //复位端 ***it LCD_RW = P2^1; //写数据端 ***it LCD_EP = P2^2; //使能端 void delay_1ms(uint z) //延时z*1ms { uint x,y; for(x=z; x>0; x--) for(y=1696; y>0; y--); } /****************侧忙函数,读状态************************/ void lcd_bz()// 测试LCD忙碌状态 { LCD_RS = 0; LCD_RW = 1; LCD_EP = 1; //EP代表的是DB7,输入使能信号,当其变为1代表不忙 delay_1ms(2); while((P1 & 0x80)); LCD_EP = 0; } /****************写命令函数************************/ lcd_wcmd(uchar cmd) { lcd_bz(); //当不忙时 LCD_RS = 0; LCD_RW = 0; LCD_EP = 0; delay_1ms(1); P1 = cmd; //将8位指令通过P0口传给1602 delay_1ms(1); LCD_EP = 1; delay_1ms(1); LCD_EP = 0; } /****************写数据函数************************/ char putchar(uchar dat) //没有将返回值送回,故存在一个警告 { lcd_bz(); //当不忙时 LCD_RS = 1; LCD_RW = 0; LCD_EP = 0; delay_1ms(1); P1 = dat; //将8位指令通过P0口传给1602 delay_1ms(1); LCD_EP = 1; delay_1ms(1); LCD_EP = 0; return(0) ; } /****************写地址函数************************/ void gotoxy (uchar y ,uint x )//置光标于y行,X列 { switch(y) { case 0 : x=x+0x80;break; case 1 : x=x+0x40+0x80; break; //1602,第二行的位置 default : break; } lcd_wcmd(x); } /****************初始化LCD1602函数************************/ lcd_init() { lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据 delay_1ms(1); lcd_wcmd(0x0c); //显示开,关光标 delay_1ms(1); lcd_wcmd(0x06); //移动光标 delay_1ms(1); lcd_wcmd(0x01); //清除LCD的显示内容 delay_1ms(80); } void Port_IO_Init() { SFRPAGE = CONFIG_PAGE; XBR2 = 0x40; } void Reset_Sources_Init() { WDTCN = 0xDE; WDTCN = 0xAD; } void Oscillator_Init() { int i = 0; SFRPAGE = CONFIG_PAGE; OSCXCN = 0x67; for (i = 0; i < 3000; i++); // Wait 1ms for initialization while ((OSCXCN & 0x80) == 0); CLKSEL = 0x01; OSCICN &= ~0x80; } void Init_Device(void) { Port_IO_Init(); Oscillator_Init(); Reset_Sources_Init(); lcd_init(); } void main() { float c=1.23569; Init_Device(); delay_1ms(2); gotoxy(0 ,1 ); //第一个字符决定行,第二个字符决定位置 delay_1ms(10) ; printf("abcddef"); //printf 跟 putchar 函数配合使用,输出字符,为最简单的字符输出 gotoxy(1,2 ); //第一个字符决定行,第二个字符决定位置 printf("wen=%6.4f",c) ;//输出的结果为wen=1.2357 while(1); } |
|
相关推荐
4个回答
|
|
程序应该没有问题,我以前都液晶都是这么写的,不知道为什么突然出现这种状况
|
|
|
|
没人帮忙啊,只能独立解决了
|
|
|
|
|
|
|
|
这边是 1602的问题,换一个就好了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11983 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 02:40 , Processed in 0.587482 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号