搜索
bottom↓
回复: 9

为什么我的lcd1602会显示乱码?

[复制链接]

出0入0汤圆

发表于 2009-7-8 15:32:31 | 显示全部楼层 |阅读模式
我取消avr的jtag lcd就变成乱码了,重新恢复jtag还是乱码,大家遇到过这种情况吗?我是通过pc口控制lcd的输出内容,pa口作为lcd的数据线。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2009-7-8 22:07:23 | 显示全部楼层
如果以前是正常的,把JTAG接口拔掉试一下,如果以前不是好的,看线接反没有,以前就是搞反了查了一个星期才发现

出0入0汤圆

 楼主| 发表于 2009-7-8 23:08:26 | 显示全部楼层
我根本没接jtag插口啊~~~还有第一行是乱码,第二行是正常的。。。把我郁闷的,搞了一天都不知到什么原因。。。

出0入0汤圆

发表于 2009-7-8 23:42:45 | 显示全部楼层
程序没问题吧

出0入0汤圆

 楼主| 发表于 2009-7-8 23:57:22 | 显示全部楼层
#include <iom16v.h>
#include <macros.h>
/*****************************************
         porta------DB0~DB7           PB0------RS
                              PB1------RW
                              PB2------E
*****************************************/
#define LCD_RS (1<<0)
#define LCD_RW  (1<<1)
#define LCD_EN (1<<2)
#define lcd_set_e()  (PORTB|= LCD_EN)   //置位与清零
#define lcd_set_rs()  (PORTB|= LCD_RS)
#define lcd_set_rw() (PORTB |= LCD_RW)
#define lcd_clear_e()  (PORTB &= ~LCD_EN)
#define lcd_clear_rs() (PORTB &= ~LCD_RS)
#define lcd_clear_rw() (PORTB &= ~LCD_RW)
#define LCD_DB PORTA
/******定义函数****************/
# define uchar unsigned char
# define uint unsigned int
void LCD_check_busy(void);
void PORT_init()
{DDRA=0xFF;
DDRB=0xFF;
DDRC=0xff;
}
void LCD_init(void);//初始化函数
void LCD_write_command(uchar command);//写指令函数
void LCD_write_data(uchar dat);//写数据函数
void LCD_disp_char(uchar x,uchar y,uchar *s);//在某个屏幕位置上显示一个字符,X(0-16),y(1-2)

void LCD_check_busy(void);//?
void delay_n40us(uint n);//延时函数
//********************************
//*******初始化函数***************
void LCD_init(void)
{
LCD_write_command(0x38);//设置8位格式,2行,5x7
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
LCD_write_command(0x06);//设定输入方式,增量不移位
LCD_write_command(0x01);//清除屏幕显示
delay_n40us(100);//?
}
//********************************
//********写指令函数************
void LCD_write_command(uchar dat)
{LCD_check_busy();
LCD_DB=dat;
lcd_clear_rs();//指令
lcd_clear_rw();//写入
lcd_set_e();
lcd_clear_e();//允许

delay_n40us(1);//实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
}
//*******************************
//********写数据函数*************
void LCD_write_data(uchar dat)
{LCD_check_busy();
LCD_DB=dat;
lcd_set_rs();//指令
lcd_clear_rw();//写入
lcd_set_e();
lcd_clear_e();//允许


delay_n40us(1);
}
//********************************
//*******显示字符函数*********
void LCD_disp_char(uchar x,uchar y,uchar *s)
{
uchar address;
if(y==1)
         address=0x80+x;
else
    {address=0xc0+x;}
LCD_write_command(address);
while(*s)
{LCD_write_data(*s);
delay_n40us(10);
s++;}

}
//********************************
//*******检查忙函数*************//
void LCD_check_busy(void)     
{uchar temp;
do
{
DDRA=0x00;
lcd_set_rw(); // Set LCD to READ
lcd_clear_rs();
lcd_set_e();
delay_n40us(1);
temp=PINA;
lcd_clear_e(); // Disable LCD
lcd_set_e();
}
while(temp&0x80);
DDRA=0xff;
}
   
               
/******************************/
//********延时函数***************//
void delay_n40us(uint n)
{ uint i;
      uchar j;            
        for(i=n*20;i>0;i--)
           for(j=0;j<2;j++)
                   NOP();
                           
}                                       
//*******************************
//*********主函数*****************
void main(void)
{       PORT_init();
        LCD_init();
                               
               
       LCD_disp_char(0,1,"hijklmn");
          
                LCD_disp_char(0,2,"hijklmn");
               
        while(1);
}
原来这个程序可以正常显示的,就是我设置了jpag熔丝后才出现乱码的。。。

出0入0汤圆

 楼主| 发表于 2009-7-9 00:00:42 | 显示全部楼层
而且很奇怪的是第一行只有部分字母出现乱码,数字不会有乱码,第二行基本正常,但有时也会出现乱码。。。

出0入0汤圆

发表于 2009-11-30 08:43:44 | 显示全部楼层
本人也出现类似情况,显示数字的时候没有乱码,只要是显示字符串就出现,而且是非显示数字区域都是乱码

出0入0汤圆

发表于 2009-12-10 09:28:54 | 显示全部楼层
求解

出0入296汤圆

发表于 2009-12-10 09:34:59 | 显示全部楼层
把Busy check改为固定的延时,然后设置一个比较大的延时时间,看看是否故障解除。
如果解除,则逐渐减小延时……

出0入0汤圆

发表于 2009-12-10 10:32:59 | 显示全部楼层
我用的是一个兼容1602的LCD,好像是JH162吧,初始化的时候要把0x38控制字连续写三遍才行。一开始不知道,也是显示乱码,当时差点把LCD当成坏件扔掉呢。

不知LZ的问题是不是与此类似
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 13:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表