查看: 4789|回复: 4

16x2 LCD 問題_MC9S08SH4

[复制链接]

该用户从未签到

1

主题

1

帖子

0

新手上路

Rank: 1

积分
20
最后登录
1970-1-1
发表于 2009-8-12 13:42:18 | 显示全部楼层 |阅读模式
想請教如下這段程序 在 8051上是可以正常顯示數值的,但轉換到 Freescale  MC9s08SH4 完全就沒有顯示,是不是有哪個寄存器的初始給錯了,能否請前輩們幫忙看看,謝謝! I/O定義,PORTB 為 data , PORTA1~3 分別為 EN,RW,RS
#include  /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#define LCD_RS    PTAD_PTAD3
#define LCD_RW    PTAD_PTAD2
#define LCD_EN    PTAD_PTAD1
#define LCD_Data  PTBD
char Table1[] = "12345678901234567890"; //第一行列表字元
char Table2[] = "ABCDEFGHIJKLMNOPQRST"; //第二行列表字元
void HWinit(void);
void Reset_LCD(void);
void Delay(unsigned int dly);
void LCD_Cmd(unsigned char comm);
void Send_Data(char Data);
void main(void)
{
  int i;  
   P1=0;
  
   HWinit();
   Reset_LCD();              //重置及清除LCD   
   Delay(200);
   LCD_Cmd(0x80);            //游標由第一行開始顯示 
   for(i=0 ; i< 20 ; i++)
     Send_Data(Table1);   //讀取列表20字送到LCD顯示  
   
   LCD_Cmd(0xC0);            //游標由第二行開始顯示  
   for(i=0 ; i< 20 ; i++)
     Send_Data(Table2);   //讀取列表20字送到LCD顯示
loop:
      LCD_Cmd(0x08); Delay(60000);
      LCD_Cmd(0x0c); Delay(60000); //D=1開啟顯示器
 
 goto loop;   


void HWinit(void)
{
    ICSC1= 0b00000100;
    ICSC2= 0b11000000;
      
    SOPT1 = 0b00000000; // BDM BIT1 OFF=0,ON=1
    //SOPT1 = 0b00000011; // For Debug
    //GPIO_initial
    PTAD  = 0b00000000;
    PTADD = 0b00001110;
    PTADS = 0b00000000;
    PTAPE = 0b00110000;
    PTASE = 0b00000000;
    PTBD  = 0b00000000;
    PTBDD = 0b11111111;
    PTBDS = 0b00000000;
    PTBPE = 0b00000000;
    PTBSE = 0b00000000;  
}
void Reset_LCD(void)    //LCD的啟始程式   

    LCD_Cmd(0x38); //DL=1:8bit傳輸,N=1:顯示2行,F=0:5*7字型       
    LCD_Cmd(0x0c); //D=1:顯示幕ON,C=0:不顯示游標,B=0:游標不閃爍      
    LCD_Cmd(0x06); //I/D=1:顯示完游標右移,S=0:游標移位禁能   
    LCD_Cmd(0x01); //清除顯示幕   
    LCD_Cmd(0x02); //游標回原位    

void Send_Data(char Data)  //傳送資料到LCD
{
    LCD_Data=Data;  //資料送到BUS
    LCD_RS=1;
    LCD_RW=0;
    LCD_EN=1; //資料到LCD內
    Delay(60); //延時片刻(可不要)
    LCD_EN=0;           //禁能LCD
}
void LCD_Cmd(byte comm) //傳送命令到LCD
{
    LCD_Data=comm;  //命令送到BUS
    LCD_RS=0;
    LCD_RW=0;
    LCD_EN=1; //命令到LCD內
    Delay(60); //延時片刻(可不要)
    LCD_EN=0;           //禁能LCD
}
void Delay(unsigned int dly)   //延時函數
{
   while(dly > 0)
   dly --;
}
 
回复

使用道具 举报

该用户从未签到

40

主题

256

帖子

0

金牌会员

Rank: 6Rank: 6

积分
10386
最后登录
2023-4-17
发表于 2009-8-20 11:33:14 | 显示全部楼层

RE:16x2 LCD 問題_MC9S08SH4

1、主要两者之间的频率差别(HCS08很快的)。
2、IO设置是否有问题。
3、尽量不要用goto。
4、还是仔细看程序。
5、祝你早日搞定。

该用户从未签到

5

主题

25

帖子

0

新手上路

Rank: 1

积分
57
最后登录
1970-1-1
发表于 2010-1-2 17:08:41 | 显示全部楼层

RE:16x2 LCD 問題_MC9S08SH4

我也认为是设置的总线频率和原来的相差较远导致。

该用户从未签到

1

主题

9

帖子

0

新手上路

Rank: 1

积分
16
最后登录
1970-1-1
发表于 2010-1-13 10:21:47 | 显示全部楼层

RE:16x2 LCD 問題_MC9S08SH4

不要用goto,IO设置有问题。再试试吧

该用户从未签到

5

主题

24

帖子

0

新手上路

Rank: 1

积分
79
最后登录
1970-1-1
发表于 2010-1-27 19:40:00 | 显示全部楼层

RE:16x2 LCD 問題_MC9S08SH4

1602的对比度调节管脚的电压设置对了吗?不确定的话直接将这个脚接到GND上。
这个脚的电压不正确你是永远都看不到显示的。祝好运!
我用MC9S08JM60同时连接两块LCD1602  OK啦,找时间我把程序和原理图放到论坛以及我的博客上。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-27 10:20 , Processed in 0.147456 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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