/*1602LCD演示程序*/
/*单片机型号:AT89S51*/
/*晶振:11.0592MHZ*/
/*作者:http://www.51hei.com*/
/*编译环境:Keil 7.50A*/
/****包含头文件*****/
#include
#include
/******************端口定义可根据你的电路自行修改*******/
sbit rs=P3^5;
sbit rw=P2^7;
sbit cs=P3^4;
sbit ep=P3^4;/*****显示数据表*******/
unsigned char code dis1[] = {"xu han jun"};
unsigned char code dis2[] = {"best wishes"};
/********************
函数功能:LCD延时子程序
入口参数:ms
出口参数:
********************/
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i<250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************
函数功能:测试LCD忙碌状态
入口参数:
出口参数:result
**********************/
bit lcd_bz()
{
bit result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (bit)(P0 & 0x80);
ep = 0;
return result;
}
/*****************
函数功能:写指令数据到LCD子程序
入口参数:cmd
出口参数:
***************/
void lcd_wcmd(unsigned char cmd)
{
while(lcd_bz());//判断LCD是否忙碌
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
/*************************
函数功能:设定显示位置子程序
入口参数:pos
出口参数:
*************************/
void lcd_pos(unsigned char pos)
{
lcd_wcmd(pos | 0x80);
}
/***********************
函数功能:写入显示数据到LCD子程序
入口参数:dat
出口参数:
************************/
void lcd_wdat(unsigned char dat)
{
while(lcd_bz());//判断LCD是否忙碌
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
/**********************
函数功能:LCD初始化子程序
入口参数:
出口参数:
***********************/
void lcd_init()
{
lcd_wcmd(0x38);
delay(1);
lcd_wcmd(0x0c);
delay(1);
lcd_wcmd(0x01);
delay(1);
lcd_wcmd(0x04);
delay(1);
}
/*****************
函数功能:主程序
入口参数:
出口参数:
********************/
void main(void)
{
unsigned char i;
lcd_init();// 初始化LCD
delay(10);
lcd_pos(0x0E);//设置显示位置
i = 0;
while(dis1[i] != '\0')
{
lcd_wdat(dis1[i]);//显示字符
i++;
}
lcd_pos(0x4E);// 设置显示位置
i = 0;
while(dis2[i] != '\0')
{
lcd_wdat(dis2[i]);// 显示字符
i++;
}
while(1);
}
上一篇:基于TLC1549的单片机数字电压表程序
下一篇:用51单片机中断法解码pt2262无线遥控器
推荐阅读最新更新时间:2024-03-16 13:13