- 博客(0)
- 资源 (1)
- 收藏
- 关注
1602液晶显示例题
#include<reg52.h>
#include<intrins.h> //具有_nop_()函数的库文件
typedef unsigned char zj; //重定义数据类型zj为无符号字符型;
sbit L_RS=P2^0; //定义控制信号L_RS连接的引脚
sbit L_RW=P2^1; //定义控制信号L_RW连接的引脚
sbit L_EP=P2^2; //定义控制信号L_EP连接的引脚
zj code disp[]={"digital tempratu"}; //写入liquid crystal的字符串数组
delay(int ms) //延时函数
{
int i;
while(ms--)
{
for(i=0;i<250;i++)
{
_nop_();_nop_();_nop_();_nop_(); } //_nop_()空操作;
}}
bit licrystal_bz() //测是liquid crystal 忙状态函数,返回“bit”类型;
{
bit result; //定义bit变量;
L_RS=0; //L_RS=0,为读命令而不是数据;
L_RW=1; //L_RW=0为读操作,而不是写操作;
L_EP=1; //L_EP=0,高电平使读操作有效;
_nop_();_nop_();_nop_();_nop_();
result=(bit)(P0&0x80); //将P0口的最高位取出,并强制为bit类型;
L_EP=0; //停止读操作;
return result; //返回liquid crystal忙标志;
}
licrystal_wcmd(zj cmd) //向liquid crystal写入指令函数;
{
while(licrystal_bz()); //liquidcrystal 忙时等待;
L_RS=0; //l_RS=0为读写命令;
L_RW=0; //L_RW为写操作
L_EP=0; //L_EP=0,为正脉冲做准备;
_nop_();_nop_();
P0=cmd; //将命令写入P0口(于liquid crystal数据总线相连);
_nop_();_nop_(); _nop_();_nop_();
L_EP=1; //L_EP=1,准备写操作下降沿;
_nop_();_nop_();_nop_();_nop_();
L_EP=0; //l_ep=0,出现有效下降沿。
}
licrystal_pos(zj pos) //设定字符显示位置函数;pos 的范围为00h~27H,40H~67H
{
licrystal_wcmd(pos|0x80); //调用写命令函数,写入位置值
}
licrystal_wdat(zj dat) //向liquid crystal写入字符(一字节的数据)
{
while(licrystal_bz()); //当忙时等待;
L_RS=1; //写数据操作
L_RW=0; //数据操作;
L_EP=0; //写操作;
P0=dat; //将显示数据写入p0口
_nop_();_nop_();_nop_();_nop_();
L_EP=1; //L_EP=1,准备写操作下降沿;
_nop_();_nop_();_nop_();_nop_();
L_EP=0; //L_EP=0,出现有效下降沿;
}
licrystal_init() //软件初始化函数
{
//L_RW为写操作
licrystal_wcmd(0x38); //16*2显示,5*7点阵,8位数据(001,DL=1,N=0,F=0,00)
delay(1);
licrystal_wcmd(0x0f); //显示开、关光标,不闪烁(0000,1,D=1,C=0,B=0;)
delay(1);
licrystal_wcmd(0x06); //增量方式移动光标(0000,0,1,I/D=0,S=0);
delay(1);
licrystal_wcmd(0x01); //清除LCD的显示内容,AC与DDRAM初始化
delay(1);
}
main()
{
zj i; //定义不符号字符变量i
licrystal_init(); //调用初始化函数,软件初始化LCD
delay(10);
while(1) //无限循环
{
licrystal_wcmd(0x06); //调用写命令函数,向右移动光标(增量)
licrystal_pos(0); //调用显示位置函数,设置显示位置为第一行的一个字符
i=0; //变量初始化
while(disp[i]!='\0') //如果没有遇到结束符,则显示字符
{
licrystal_wdat(disp[i]); //调用写数据函数,向liquid crystal写字符,由于增量方式,所以AC自动加1
i++;
delay(10); //设置两个字符之间显示的速度
}
//控制两屏之间的转换时间
}
}
2009-09-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人