lcd1602液晶屏通过4个5*8的矩阵组合点亮某些点,即可观察到中文(最多8个自定义字符)下面是实验效果的实物图
单片机源程序如下:
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit lcdrs = P0^7; //液晶引脚定义
- sbit led_cs = P0^6;
- sbit lcden = P0^5;
- uchar num;
- uchar code cg_1602[]={0x00,0x00,0x00,0x01,0x01,0x01,0x05,0x05,
- 0x00,0x00,0x04,0x04,0x04,0x04,0x1f,0x15,
- 0x05,0x05,0x01,0x01,0x01,0x02,0x02,0x00,
- 0x15,0x15,0x15,0x04,0x04,0x04,0x00,0x00, //帅
- 0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x07,
- 0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1e,
- 0x04,0x04,0x04,0x04,0x06,0x00,0x00,0x00,
- 0x10,0x10,0x10,0x12,0x1e,0x00,0x00,0x00};//比
- //根据5*8的矩阵自己定义字符,通过16进制的数转化
- /*延时函数*/
- void delay(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=114;j>0;j--);
- }
- /*1602液晶*/
- void write_com(uchar com)//写命令
- {
- lcdrs=0;
- lcden=0;
- P2=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_data(uchar date)//写数据
- {
- lcdrs=1;
- lcden=0;
- P2=date;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_cg()//写入固定汉字和符号
- {
- write_com(0x40); //设定CGRAM地址
- for(num=0;num<64;num++) //将自定义字型码写入CGRAM中 最多8个自定义字符,8*8=64 如果是5个自定义字符就是5*8=40
- {
- write_data(cg_1602[num]);
- }
- //第一个字
- write_com(0x80);
- {
- write_data(0);
- }
- write_com(0x81);
- {
- write_data(1);
- }
- write_com(0xc0);
- {
- write_data(2);
- }
- write_com(0xc1);
- {
- write_data(3);
- }
- //第二个字
- write_com(0x82);
- {
- write_data(4);
- }
- write_com(0x83);
- {
- write_data(5);
- }
- write_com(0xc2);
- {
- write_data(6);
- }
- write_com(0xc3);
- {
- write_data(7);
- }
-
- }
- void init_1602()//初始化
- {
- led_cs=0;
- write_com(0x38);
- write_com(0x0c);
- write_com(0x06);
- write_com(0x01);
- write_cg();
- }
- /*主函数*/
- void main()
- {
- led_cs=0;
- …………
- …………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
全部资料51hei下载地址:
1602.docx
(14.01 KB, 下载次数: 7)
|