51单片机实验 2017年12月13日

来源:互联网 发布:上古卷轴5天际捏脸数据 编辑:程序博客网 时间:2024/05/17 22:47
2017年12月15日
1602液晶显示程序
1602液晶屏内部常用的命令定义:
1、0x38:设置16*2显示;5*7点阵;8位数据口连接
2、0x01:清屏
3、0x0f:开显示,显示光标,光标不闪烁
4、0x08:只开显示
5、0x0e:开显示不显示光标
6、0x06:地址加一,当写入数据时光标右移
7、0x02:地址计数器AC=0(此时地址为0x80)光标归原点但DDRAM中断内容不变
8、0x18:光标和显示一起向左移动
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P3^2;//位定义1602液晶使能脚sbit rs=P3^0;  //位定义1602液晶数据/命令(H/L)引脚sbit rw=P3^1;//位定义1602液晶读/写(H/L)引脚sbit dula=P2^6;//数码管段选sbit wela=P2^7;//数码管位选uchar table1[]="HELLO QX-MCS51";//第一行要显示的字符uchar table2[]="  QQ:7651719  ";//第二行要显示的字符void delay(uint x)//延时函数,单位us{uint a,b;for(a=x;a>0;a--)for(b=10;b>0;b--); }void delay1(uint x)//延时函数,单位ms{uint a,b;for(a=x;a>0;a--)for(b=100;b>0;b--); }void write_com(uchar com)//向D0~D7输入指令{P2=com;  //将8条串口数据线赋给comrs=0;//指令lcden=0; //使能端初始化delay(10); //延时10uslcden=1;//使能端由高电平转向低电平时输入指令delay(10);   //延时10uslcden=0;}void write_date(uchar date)//向D0~D7输入数据{P2=date;rs=1;  //数据lcden=0; //使能端初始化delay(10); //延时10uslcden=1; //在en使能端由高电平转向低电平之间的时间里向1602输入数据或命令delay(10); //延时10uslcden=0;}void init()//液晶初始化{rw=0;//写dula=0;//关闭段选和位选wela=0;write_com(0x38);//设置16乘2显示,5乘7点阵,8位数据口连接   delay(20);write_com(0x0f); //开显示,显示光标,光标不闪烁  delay(20);write_com(0x06);//地址加1,当写入数据时向右移  delay(20);write_com(0x01); //清屏 delay(20);}void main(){uchar a;init();//液晶初始化函数write_com(0x80+17);//0x80为液晶显示第一行初始地址delay(20);   //延时20usfor(a=0;a<14;a++)  //a代表table1字符显示的字符数量{write_date(table1[a]);//向1602中输入字符delay(20);//等待20us}write_com(0xc0+17);//液晶第二行初始地址delay(50);   //延时50us/*for(a=0;a<14;a++){write_date(table2[a]);//a代表table2中的字符delay(40);  //等待40us}*/for(a=0;a<16;a++)//右移16个字符{write_com(0x18); //光标和显示一起向左移delay1(200);  //延时200ms   }while(1); //循环
}
原创粉丝点击