qrsxtkf的博客

51、stm32单片机编程

lcd1602显示实验
/*
字符从最右边往左移动16次,最后停止在屏幕上
*/
 
#include<reg52.h>


#define uchar unsigned char
#define uint unsigned int


uchar code display[]="talk is cheap";
uchar code display1[]="show me code";


sbit lcde=P2^7; //定义P2^7口为液晶使能端


sbit rs=P2^6; //数据/命令选择端(H/L)


sbit rw=P2^5; //读/写选择端(H/L)


void delay(uint z); //延时函数的声明


void inint(); //初始化函数声明


void lcdwritecom(uchar com);//写命令函数声明


void lcdwritedata(uchar dat);//写数据函数声明




void inint() //lcd初始化设置(这些设置都是连在一起的)
{
    lcde=0;
lcdwritecom(0x38); //显示模式设置
lcdwritecom(0x0c); //开显示不显示光标
// lcdwritecom(0x06); //写一个字符后地址指针加1
lcdwritecom(0x01); //清屏
// lcdwritecom(0x80); //设置数据地址指针起点
   //此处设置 150页参考6、7、8三种设置




}


void lcdwritecom(uchar com) //写命令函数
{
lcde=0;   //先置0,等待上升沿
rs=0;          //选择命令
rw=0;     //写操作
P0=com;   //放入命令 (数据输入端接的是P0口)
delay(5);   //延时5ms,等待数据稳定
lcde=1;   //写入时序,上升沿开始写入
delay(5);   //延时5毫秒,等待命令写入并稳定
lcde=0;   //等待下个命令写入

}


void lcdwritedata(uchar date) //写数据函数
{   
lcde=0;   
rs=1;   //选择数据
rw=0;   //选择写入
P0=date;   //写入数据
delay(5);   //等待数据稳定
lcde=1;   //写入时序
delay(5);   //保持时间,等待数据写入并稳定
lcde=0; //等待下个命令写入
}


void main()
{
uint i;
inint();//初始化
lcdwritecom(0x80+0x10); //写命令(第一行),最右边
for(i=0;i<13;i++) //因为10个字符,所以循环写入10次
{
lcdwritedata(display[i]); //写一个数据(此数据为数组)
delay(5); //延时稳定
}


lcdwritecom(0x80+0x50); //写命令(第二行),最右边
for(i=0;i<12;i++)   //7个字符(空格也算一个字符)
{
lcdwritedata(display1[i]);
delay(5);
}
for(i=0;i<29;i++)
{
lcdwritecom(0x18); //整屏左移命令
delay(1000);
}
while(1);
}


void delay(uint z)//延时Zms函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}




 




/*
希望达成的功能是字符的滚动显示*/
/*
#include<reg52.h>


#define uchar unsigned char
#define uint unsigned int


uchar code display[]="talk is cheap";
uchar code display1[]="show me code";


sbit lcde=P2^7; //定义P2^7口为液晶使能端


sbit rs=P2^6; //数据/命令选择端(H/L)


sbit rw=P2^5; //读/写选择端(H/L)


void delay(uint z); //延时函数的声明


void inint(); //初始化函数声明


void lcdwritecom(uchar com);//写命令函数声明


void lcdwritedata(uchar dat);//写数据函数声明




void inint() //lcd初始化设置(这些设置都是连在一起的)
{
    lcde=0;
lcdwritecom(0x38); //显示模式设置
lcdwritecom(0x0c); //开显示不显示光标
lcdwritecom(0x06); //写一个字符后地址指针加1
lcdwritecom(0x01); //清屏
// lcdwritecom(0x80); //设置数据地址指针起点
   //此处设置 150页参考6、7、8三种设置




}


void lcdwritecom(uchar com) //写命令函数
{
lcde=0;   //先置0,等待上升沿
rs=0;          //选择命令
rw=0;     //写操作
P0=com;   //放入命令 (数据输入端接的是P0口)
delay(5);   //延时5ms,等待数据稳定
lcde=1;   //写入时序,上升沿开始写入
delay(5);   //延时5毫秒,等待命令写入并稳定
lcde=0;   //等待下个命令写入

}


void lcdwritedata(uchar date) //写数据函数
{   
lcde=0;   
rs=1;   //选择数据
rw=0;   //选择写入
P0=date;   //写入数据
delay(5);   //等待数据稳定
lcde=1;   //写入时序
delay(5);   //保持时间,等待数据写入并稳定
lcde=0; //等待下个命令写入
}


void main()
{
uint i;
while(1)
{
inint();//初始化
lcdwritecom(0x80+0x10); //写命令(第一行),最右边
for(i=0;i<13;i++) //因为10个字符,所以循环写入10次
{
lcdwritedata(display[i]); //写一个数据(此数据为数组)
delay(5); //延时稳定
}

lcdwritecom(0x80+0x50); //写命令(第二行),最右边
for(i=0;i<12;i++)   //7个字符(空格也算一个字符)
{
lcdwritedata(display1[i]);
delay(5);
}
// lcdwritecom(0x07);//整屏移动指令,与lcdwritecom(0x18)一样的作用
}
while(1)
{
lcdwritecom(0x80);
for(i=0;i<10;i++)
{
lcdwritedata(display1[i]);
delay(1000); //如果不加这条延时语句的话滚动会非常快。
}
lcdwritecom(0x80+0x40); //写命令(第二行),最右边
for(i=0;i<7;i++)   //7个字符(空格也算一个字符)
{
lcdwritedata(display1[i]);
delay(1000);
}
}  
 



}


void delay(uint z)//延时Zms函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}  
 */
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qrsxtkf/article/details/80330149
想对作者说点什么? 我来说一句

实验十六.LCD1602显示

2011年10月29日 1.45MB 下载

CC2530驱动LCD显示

2014年10月31日 45KB 下载

没有更多推荐了,返回首页

不良信息举报

lcd1602显示实验

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭