|
把51的顯示移植到飛思卡爾MC9S08DZ60上,可以顯示,但是是亂碼,亂的一塌糊涂,第幾行都對不上,程序代碼如下,求高手解答和指點,謝謝。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include <math.h>
#define LCD_data PTED // 引腳定義
#define LCD_RS PTBD_PTBD0
#define LCD_RW PTBD_PTBD1
#define LCD_EN PTBD_PTBD2
#define LCD_PSB PTBD_PTBD3
byte DIS1[]={"行李分揀系統(tǒng)狀態(tài)"};
byte DIS2[]={"空位量00000000件"};
byte DIS3[]={"補貨量00000000件"};
byte DIS4[]={"運行狀態(tài):fast "};
byte DIS5[]={"運行狀態(tài):slow "};
byte table[]={'0','1','2','3','4','5','6','7','8','9'};
byte i,numbuf,numbuf1,a,b,c,d,e;
/******************************12864*****************************************************/
void delay_ms(unsigned int ms) //延時函數(shù) 1ms
{
unsigned int i,j;
for(j=0;j<=ms;j++)
{
for(i=0;i<=120;i++)
{}
}
}
void delay(uint z)
{
uint x;
for(x=z;x>0;x--)
;
}
void LCD_wcmd(uchar cmd) //寫指令函數(shù)
{
LCD_RS = 0; //RS至低,指令操作
LCD_RW = 0; //RW至低,寫操作
LCD_EN = 0;
delay(5);
PTED = cmd; //指令數(shù)據(jù)
delay(5);
LCD_EN = 1; //給使能端一個上升沿保存數(shù)據(jù)
delay(5);
LCD_EN = 0;
delay(5);
}
void LCD_wdat(uchar dat) //寫數(shù)據(jù)函數(shù)
{
LCD_RS = 1; //RS至高,數(shù)據(jù)操作
LCD_RW = 0;
LCD_EN = 0;
PTED= dat; //給LCD要顯示的數(shù)據(jù)
delay(5);
LCD_EN = 1; //給使能端一個上升沿保存數(shù)據(jù)
delay(5);
LCD_EN = 0;
delay(5);
}
void LCDinit() //初始化12864LCD
{
LCD_PSB=1;
LCD_wcmd(0x30); //初級指令集
delay_ms(5);
LCD_wcmd(0x0C); //開顯示
delay_ms(5);
LCD_wcmd(0x01); //清屏
delay_ms(5);
}
void showLCD_12864()
{
LCD_wcmd(0x80); //第一行首地址
for(i=0;i<16;i++)
{
LCD_wdat(DIS1[i]);
delay(100);
}
LCD_wcmd(0x90); //第二行首地址
for(i=0;i<16;i++)
{
LCD_wdat(DIS2[i]);
delay(100);
}
LCD_wcmd(0x88); //第三行首地址
for(i=0;i<16;i++)
{
LCD_wdat(DIS3[i]);
delay(100);
}
LCD_wcmd(0x98); //第4行首地址
for(i=0;i<16;i++)
delay(100);
{ if(numbuf==55)
{
LCD_wdat(DIS4[i]);
}
else
{
LCD_wdat(DIS5[i]);
}
}
}
/******************************按鍵****************************************************/
void main()
{
PTEDD=0xff; // 引腳定義
PTBDD=0x0f;
numbuf=55;
numbuf1=66;
LCDinit();
for(;;)
{
showLCD_12864();
delay_ms(500);
__RESET_WATCHDOG();
}
/* feeds the dog */
/* loop forever */
/* please make sure that you never leave main */
}
|
|