我想做的是兩行字體都是從最右邊一起移入;
可是為什么第一行字體從最右邊移入,而第二行不是;
仿真圖片:
1.PNG (60.88 KB, 下載次數: 22)
下載附件
第二行卻在中間移入
2018-10-28 10:35 上傳
2.PNG (61.34 KB, 下載次數: 32)
下載附件
第一行最右移入
2018-10-28 10:35 上傳
這是代碼:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
void LCD_initial(void); //LCD初始化函數
void check_busy(void); //檢查忙標志函數
void write_command(uchar com); //寫命令函數
void write_data(uchar dat); //寫數據函數
void string(uchar ad,uchar * s);
void lcd_test(void);
void delay(uint);
void main (void)
{
LCD_initial();
while(1)
{
string(0x8f,"welcome");
string(0xcf,"Harbin china");
delay(100);
write_command(0x01);
delay(100);
}
}
void delay(uint j)
{
uchar i=250;
for(;j>0;j--)
{
while(--i);
i=249;
while(--i);
i=250;
}
}
void check_busy(void)
{
uchar dt;
do
{
dt=0xff;
E=0;
RS=0;
RW=1;
E=1;
dt=out;
}while(dt&0x80);
E=0;
}
void write_command(uchar com)
{
check_busy();
E=0;
RS=0;
RW=0;
out=com;
E=1;
_nop_();
E=0;
delay(1);
}
void write_data(uchar dat)
{
check_busy();
E=0;
RS=1;
RW=0;
out=dat;
E=1;
_nop_();
E=0 ;
delay(1);
}
void LCD_initial(void)
{
write_command(0x38); //8位兩行顯示,5X7點陣字符
write_command(0x0c); //開整體顯示,光標關,無黑塊
write_command(0x07); //光標右移
write_command(0x01); //清屏
delay(1);
}
void string(uchar ad,uchar *s)
{
write_command(ad);
while(* s > 0)
{
write_data(*s++); //輸出字符串,且指針增1
delay(100);
}
}
非常感謝你的回答
|