仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code hz48_48[];
- /*********LCD12864液晶引脚功能定义**********/
- sbit cs=P0^0; //片选使能
- sbit reset=P0^1; //复位
- sbit rs=P0^2; //命令/数据选择,L:命令 H:数据
- sbit sid=P0^3; //串行数据输入
- sbit sclk=P0^4; //时钟
- void delay(uint i) /*1ms延时函数*/
- {
- uint j,k;
- for(j=0;j<i;j++)
- for(k=0;k<110;k++);
- }
- /*********LCD12864写指令********/
- void transfer_command(uchar data1)
- {
- char i;
- cs=0;
- rs=0;
- for(i=0;i<8;i++)
- {
- sclk=0;
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=1;
- data1=data1<<=1;
- }
- }
- /*********LCD12864写数据********/
- void transfer_data(uchar data1)
- {
- char i;
- cs=0;
- rs=1;
- for(i=0;i<8;i++)
- {
- sclk=0;
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=1;
- data1=data1<<=1;
- }
- }
- /*********LCD12864初始化*********/
- void initial_lcd()
- {
- cs=0;
- reset=0; /*低电平复位*/
- delay(100);
- reset=1; /*复位完毕*/
- delay(20);
- transfer_command(0xe2); /*软复位*/
- delay(5);
- transfer_command(0x2c); /*升压步聚 1*/
- delay(5);
- transfer_command(0x2e); /*升压步聚 2*/
- delay(5);
- transfer_command(0x2f); /*升压步聚 3*/
- delay(5);
- transfer_command(0x23); /*粗调对比度,可设置范围 0x20~0x27*/
- transfer_command(0x81); /*微调对比度*/
- transfer_command(0x28); /*0x1a,微调对比度的值,可设置范围 0x00~0x3f*/
- transfer_command(0xa2); /*1/9 偏压比(bias)*/
- transfer_command(0xc0); /*行扫描顺序:从上到下,若设为0xc8,则图文垂直镜像*/
- transfer_command(0xa1); /*列扫描顺序:从右到左,若设为0xa0,则图文水平镜像*/
- transfer_command(0x40); /*起始行:第一行开始*/
- transfer_command(0xaf); /*开显示*/
- cs=1;
- }
- void clear() //清屏
- {
- uchar i,j;
- for(j=0;j<8;j++) //循环8页64行
- {
- transfer_command(0xb0+j); //设置页地址
- transfer_command(0x10); //列地址高4位
- transfer_command(0x00); //列地址低4位
- for(i=0;i<128;i++) //循环128列
- {transfer_data(0x00);} //清屏(清零)
- }
- }
- void display_hz48_48(uchar page,uchar col,uchar *dp) //定义页、列、指针
- {
- uchar i,j;
- for(j=0;j<6;j++) //循环6页48行(本案例显示48*48汉字,即48行48列)
- {
- transfer_command(0xb0+page+j); //设置页地址
- transfer_command(0x10+((col>>4)&0x0f)); //列地址高4位,位置跟随
- transfer_command(0x00+(col&0x0f)); //列地址低4位,位置跟随
- for(i=0;i<48;i++) //循环48列
- {
- transfer_data(*dp);
- dp++;
- }
-
- }
- }
- void main(void) //主程序
- {
- initial_lcd(); //初始化
- clear(); //清屏
- delay(200);
- display_hz48_48(1,12,hz48_48); //显示第一个字,位置坐标:第1页第12列
- display_hz48_48(1,68,hz48_48+288); //显示第二个字,位置坐标:第1页第68列
- while(1);
- }
- /*******以下为字形代码,由PCtoLCD2002提取**********/
- uchar code hz48_48[][288]={
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x08,0x18,0x38,0x78,0xF8,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0xFE,0xFE,0x08,0x08,0x0C,0x0C,
- 0x0C,0x0C,0x84,0x84,0x84,0x84,0xC6,0xC6,0xC6,0xC6,0xE2,0xE2,0x62,0x62,0x03,0x03,
- 0x03,0x03,0x63,0x73,0x3F,0x3F,0x1F,0x1F,0x1F,0x0E,0x0C,0x08,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x03,0x00,0x00,0x00,0x08,0x38,
- 0xF8,0xF8,0xF0,0x10,0x19,0x19,0x19,0x08,0x08,0x08,0x0C,0x8C,0xFC,0xFC,0xFC,0x3C,
- 0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0xC0,0xC0,0xC0,0xC0,
- 0xC1,0xC7,0x47,0x47,0x62,0x63,0xE3,0xE3,0xE3,0xE3,0x21,0x31,0x31,0x31,0x31,0x31,
- 0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,
- 0xC0,0x08,0x08,0x08,0x0C,0x0C,0xFF,0xFF,0xFF,0x9F,0x8C,0x8C,0x84,0x84,0x80,0x80,
- 0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,
- 0x07,0x03,0x03,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,0x1F,
- 0x1F,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"富",0*/
- /* (48 X 48 , 楷体, 加粗 )*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x06,0x06,0x06,0x06,0x03,0xFF,
- 0xFF,0xFF,0x3F,0x0F,0x06,0x00,0x00,0x02,0x1E,0xFE,0xFE,0xFE,0x82,0x82,0x82,0x82,
- 0x83,0xC1,0xC1,0xFB,0xFF,0x7F,0x5F,0x0F,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0x0C,0x0C,0x04,0x06,0x06,0x07,
- 0x07,0x02,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x81,0x83,0x83,0x81,0x81,0xFF,0xFF,
- 0xFE,0x4E,0x40,0x60,0x60,0x60,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x10,0x38,0x3E,0x3F,0x1F,0x0F,0x0C,0x04,0x06,0x0E,0xFE,0xFE,
- 0xFC,0x3C,0x08,0x00,0x00,0x03,0x0F,0x3F,0xFF,0xF1,0x60,0x60,0x60,0x20,0xFF,0xFF,
- 0xFF,0x20,0x30,0x30,0x30,0x3E,0x3F,0x1F,0x17,0x03,0x01,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFF,0xFF,
- 0xFF,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0x60,0x60,0x7F,0x3F,
- 0x3F,0x30,0x10,0x13,0x17,0x1E,0x7E,0xFC,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x0F,0x0F,0x0F,0x07,0x03,
- 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x03,0x00,0x00,0x00,0x00,/*"强",1*/
- /* (48 X 48 , 楷体, 加粗 )*/
- };
复制代码
全部资料51hei下载地址:
LCD12864串行方式显示.zip
(63.46 KB, 下载次数: 37)
|