求一个51单片机程序:串口助手发送数据,然后在12864上显示。急呀

2025-03-04 13:24:15
推荐回答(2个)
回答1:

#include
#include
#include
#define uchar unsigned char
#define Fisrt_Addr 0 //定义字符/汉字显示起始位置

sbit LCD_RS=P2^2;
sbit LCD_RW=P2^3;
sbit LCD_E=P2^4;
sbit PCB=P2^5;

uchar i,j;

void delay(int ms)
{
while(ms--)
{
for(j=0;j<120;j++);
}
}

bit lcd_busy()
{ bit result;
LCD_RS=0;
LCD_RW=1;
LCD_E= 1;
result=(bit)(P0&0x80);
LCD_E=0;
return result;
}
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;

P0=cmd;
LCD_E=1;
LCD_E=0;
}
void lcd_wdata(uchar dat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;

P0=dat ;
LCD_E=1;
LCD_E=0;
}
void lcd_initial()
{
lcd_wcmd(0x30);
delay(1);
lcd_wcmd(0x0C); //开显示,关光标,不闪烁
delay(1);
lcd_wcmd(0x06);//指定在资料写入或读取时,光标的移动方向
delay(1);
lcd_wcmd(0x01);
delay(10); //这里要延时长一点,否侧会影响下面的操作
}

/*------------------清屏命令--------------------------*/
void Clr_Screen()
{
//考虑到前面出现0x34
lcd_wcmd(0x01);
delay(100);
}

void Zi_FU(uchar code *s)
{
while(*s!=0)
{ lcd_wdata(*s);
s++;
delay(10);
}
}

void feeling1()
{
lcd_wcmd(0x30);
delay(300);
lcd_wcmd(0x80+Fisrt_Addr);
Zi_FU("2013 03 26");
delay(300);
lcd_wcmd(0x90+Fisrt_Addr);
Zi_FU("电气08-17");
delay(300);
lcd_wcmd(0x88+Fisrt_Addr);
Zi_FU("ne-qi");
delay(300);
lcd_wcmd(0x98+Fisrt_Addr);
delay(500);
Zi_FU("2012.5.30");
}

void main()
{
PCB=1;
while(1)
{
lcd_initial();
delay(1000);
Clr_Screen();

feeling1();
delay(3000);
for(i=8;i>0;i--)
{
lcd_wcmd(0x18); //一二行与三四行调换了,液晶分为上下两个半屏,
delay(1000);
}
Clr_Screen();
feeling1();
lcd_wcmd(0x34);
lcd_wcmd(0x04);
delay(3000);
lcd_wcmd(0x04); //恢复正常
delay(3000);
lcd_wcmd(0x34);
lcd_wcmd(0x03); //允许输入滚动地址
for(i=0x40;i<0x7f;i++)
{
lcd_wcmd(i); //垂直滚动屏幕的内容
delay(600); //上翻屏延时
}

}

}

回答2:

找论文上面有