跪求 单片机 用C语言写一个程序 用LCD显示welcome 急急急急十万火急 在线等

如题所述

#include <reg51.h> //51寄存器文件
#include <intrins.h>
typedef unsigned char BYTE; //用BYTE代替unsigned char
typedef unsigned int WORD;//WORD代替unsigned int
typedef bit BOOL ;//用BOOL代替bit
sbit rs = P2^6; //复位端
sbit rw = P2^5; //写数据端
sbit ep = P2^7; //使能端
BYTE code dis1[] = {"welcome!,I'm Tom"};

//LCD侧忙函数
BOOL lcd_bz()
{
BOOL result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (BOOL)(P0 & 0x80); //检测P0最高位是否为1
ep = 0;
return result;//返回侧忙结果
}
// 写入指令数据到LCD
lcd_wcmd(BYTE cmd)
{
while(lcd_bz());
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd; //将8位指令通过P0口传给1602
_nop_();
_nop_();//用于产生一个脉冲宽度
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
//设定显示位置
lcd_pos(BYTE pos)
{
lcd_wcmd(pos | 0x80);
}
//写入字符显示数据到LCD
lcd_wdat(BYTE dat)
{
while(lcd_bz());
rs = 1;
rw = 0;
ep = 0;
P0 = dat;//将8位数据通过P0口传给1602
_nop_();
_nop_();
_nop_(); //用于产生一个脉冲宽度
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
//LCD初始化设定
lcd_init()
{
lcd_wcmd(0x38); ////16*2显示,5*7点阵,8位数据
lcd_wcmd(0x0c); //显示开,关光标

lcd_wcmd(0x06); //移动光标

lcd_wcmd(0x01); //清除LCD的显示内容

}
main()
{
BYTE i;
lcd_init(); //初始化LCD
lcd_pos(4); //设置显示位置为第一行的第5个字符
i = 0;
while(dis1[i] != '\0')
{ //显示字符"welcome!"
lcd_wdat(dis1[i]);
i++;
}
while(1);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-20
#include
#define uchar unsigned char
#define PORT P0
sbit RS=P2^0;
sbit E=P2^1;
sbit RW=P2^2;
delay(uchar a)
{
uchar i;
for(i=0;i<a;i++);
}

void LCD_wd(uchar c)
{RS=1;<br/>RW=0;<br/>PORT=c;<br/>E=1;<br/>delay(100);<br/>E=0;<br/>}
void LCD_wc(uchar c)
{RS=0;<br/>RW=0;<br/>PORT=c;<br/>E=1;<br/>delay(100);<br/>E=0;<br/>}
main()
{
LCD_wc(0x38);
delay(100);
LCD_wc(0x08);
delay(100);
LCD_wc(0x01);
delay(100);
LCD_wc(0x06);
delay(100);
LCD_wc(0x0c);
delay(100);
LCD_wc(0x80);
delay(100);
LCD_wd('W');LCD_wd('e');LCD_wd('l');LCD_wd('c');LCD_wd('o');LCD_wd('m');LCD_wd('e');

LCD_wd('!');
while(1);
}
相似回答