- #include <stdio.h>
- #include <reg52.h>
- #include <intrins.h>
-
- #define uchar unsigned char
- #define uint unsigned int
- sbit CD=P3^0;
- sbit RESET=P3^3;
- sbit W=P3^2;
- sbit R=P3^1; //定义各控制口
-
- void delay(void); //声明延迟函数
- void state01(void); //声明S0S1状态检查函数
- void state3(void); //声明S3状态检查函数
- void writed1d2(uchar,uchar); //声明参数写入函数
- void writecom(uchar); //声明指令写入函数
- void writedat(uchar); //声明数据写入函数
- void writedatauto(void); //声明数据自动写函数
- void charshow(void); //声明字型显示函数
- void charflash(void); //声明字型闪烁控制函数(PT:死循环)
- void writebyte(void); //声明写入一个字符函数
- void readycharshow(void); //声明字型写入准备函数
- void clear(void); //声明清屏函数(全屏写空格)
- void blank(void); //声明写空格函数
-
- void delay(void)
- {
- uchar data i;
- uint data j;
- for(i=0;i<100;i++)
- for(j=0;j<300;j++);
- }
-
- void state01(void)
- {
- uchar idata i;
- P1=0xff;
- do
- {
- R=0;
- i=P1;
- R=1;
- }
- while((i&0x03)!=0x03);
- }
-
- void state3(void)
- {
- uchar idata i;
- P1=0xff;
- do
- {
- R=0;
- i=P1;
- R=1;
- }
- while((i&0x08)!=0x08);
- }
-
- void writed1d2(uchar d1,uchar d2)
- {
- state01();
- CD=0;
- P1=d1;
- W=0;
- W=1;
- CD=1;
- /////////////////////////////
- state01();
- CD=0;
- P1=d2;
- W=0;
- W=1;
- CD=1;
- }
-
- void writecom(uchar com)
- {
- state01();
- CD=1;
- P1=com;
- W=0;
- W=1;
- }
-
- void writedat(uchar dat)
- {
- state01();
- CD=0;
- P1=dat;
- W=0;
- W=1;
- CD=1;
- }
-
- void writedatauto(void)
- {
- uchar data n;
- writecom(0xb0); //数据自动写开
-
- for(n=0;n<30;n++) //数据自动写段,文字属性
- {
- state3();
- writedat(0x27);
- }
-
- writecom(0xb2); //数据自动写关
- }
-
- void clear(void)
- {
- uint data n;
- writed1d2(0x00,0x00); //地址指针
- writecom(0x24);
- writecom(0xb0); //数据自动写开
-
- for(n=0;n<10000;n++) //数据自动写段,文字属性
- {
- state3();
- writedat(0x00);
- }
-
- writecom(0xb2); //数据自动写关
- }
-
- void charflash(void)
- {
- while(1) //字型闪烁控制(死循环)
- {
- state01();
- writecom(0x98);
- delay();
- state01();
- writecom(0x90);
- delay();
- };
- }
-
- void writebyte(void)
- {
- state01(); //写一个字符,文字属性
- writedat(0x28);
- state01();
- writecom(0xc0);
- }
- //////////////////////////
- void readycharshow(void) //静态显示可调用
- {
- uchar idata number;
- number=30; //写入字型图象数
- state01();
- writed1d2((number=(number<<1)),0x00); //图象区宽度 240的LCD横向字节数为30个
- writecom(0x43);
- }
- //////////////////////
- void blank(void)
- {
- uchar idata i;
- for(i=0;i<16;i++)
- {
- state01();
- writedat(0x00);
- state01();
- writecom(0xc0);
- }
- }
- //////////////////////
- void main(void)
- {
-
- uchar idata i,a,b; //可随意支配参数
- P3=0xff; //P3控制口置位
- RESET=0; //LCD上电复位
- delay();
- RESET=1;
- delay();
- /*
- writed1d2(0x00,0x00); //光标设置
- writecom(0x21);
- writecom(0x93);
- writecom(0xa7);
- */
- writed1d2(0x00,0x00); //地址指针
- writecom(0x24);
-
- writed1d2(0x00,0x00); //文字首地址
- writecom(0x40);
-
- writed1d2(0x1e,0x00); //文字区宽度 注意进制换算 C中0x1e=汇编中30
- writecom(0x41);
-
- writed1d2(0x00,0x00); //图象首地址
- writecom(0x42);
-
- // writed1d2(0x1e,0x00); //图象区宽度 240的LCD横向字节数为30个
- // writecom(0x43); //(后面有设置)
-
- writecom(0x98); //文字开/关 图象开/关
-
- writecom(0x80); //启用内部文字 (逻辑选择)
-
- // writebyte();
-
-
- /*清全屏幕,注意文字、图形参数不同,文字图形都有时以图形为准,参数可取大些*/
- clear();
- writed1d2(0x00,0x00); //地址指针
- writecom(0x24);
- /* */
-
- // readycharshow();
-
- while(1)
- {
- charshow();
-
- writed1d2(0x00,0x00); //地址指针
- writecom(0x24);
- };
- while(1)
- {
- ;
- }
- }
-
-
- void charshow(void)
- {
- uchar data i,j,k;
-
- uchar code word[16][32]={
-
- /*-- 文字: 昆 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x20,0x40,0x20,0x40,
- 0x20,0x44,0x3E,0x4C,0x20,0x70,0x20,0x40,0x26,0x42,0x38,0x42,0x20,0x3E,0x00,0x00,
-
- /*-- 文字: 山 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x21,0x04,0x21,0x04,0x21,0x04,
- 0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x7F,0xFC,0x20,0x04,0x00,0x00,
-
- /*-- 文字: 市 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x02,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x1F,0xF8,0x11,0x08,0x11,0x08,
- 0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x28,0x11,0x10,0x01,0x00,0x01,0x00,
-
- /*-- 文字: 创 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x08,0x02,0x08,0x02,0x14,0x12,0x13,0x12,0x21,0xD2,0x40,0x92,0xBF,0x12,0x21,0x12,
- 0x21,0x12,0x25,0x12,0x22,0x12,0x20,0x82,0x20,0x82,0x20,0x8A,0x1F,0x84,0x00,0x00,
-
- /*-- 文字: 新 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x10,0x00,0x08,0x0E,0x7F,0x70,0x22,0x40,0x14,0x40,0xFF,0x7E,0x08,0x48,0x08,0x48,
- 0xFF,0x48,0x08,0x48,0x2C,0x48,0x2A,0x88,0x4A,0x88,0x89,0x08,0x2A,0x08,0x10,0x08,
-
- /*-- 文字: 科 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x06,0x08,0x78,0x88,0x08,0x48,0x08,0x48,0xFE,0x08,0x18,0x88,0x1C,0x48,0x2A,0x48,
- 0x28,0x0E,0x48,0x78,0x8B,0x88,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-
- /*-- 文字: 技 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x10,0x20,0x10,0x20,0x10,0x20,0xFD,0xFE,0x10,0x20,0x14,0x20,0x19,0xFC,0x31,0x08,
- 0xD0,0x88,0x10,0x90,0x10,0x60,0x10,0x60,0x10,0x90,0x11,0x0E,0x56,0x04,0x20,0x00,
-
- /*-- 文字: 检 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x10,0x40,0x10,0x40,0x10,0xA0,0xFD,0x10,0x12,0x0E,0x38,0x00,0x35,0xF8,0x50,0x00,
- 0x50,0x88,0x92,0x4C,0x11,0x48,0x11,0x50,0x10,0x20,0x17,0xFE,0x10,0x00,0x00,0x00,
-
- /*-- 文字: 测 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
- 0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
-
- /*-- 文字: 仪 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x08,0x80,0x08,0x40,0x10,0x68,0x12,0x48,0x22,0x08,0x62,0x10,0xA1,0x10,0x21,0x10,
- 0x20,0xA0,0x20,0xA0,0x20,0x40,0x20,0xA0,0x21,0x10,0x22,0x0E,0x2C,0x04,0x20,0x00,
-
- /*-- 文字: 器 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,0x01,0x10,0x01,0x08,0xFF,0xFC,0x06,0xC0,
- 0x18,0x30,0xE0,0x0E,0x3E,0xFC,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8,0x00,0x00,
-
- /*-- 文字: 有 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x01,0x00,0x01,0x00,0x7F,0xFE,0x02,0x00,0x04,0x00,0x0F,0xF0,0x18,0x10,0x28,0x10,
- 0x4F,0xF0,0x88,0x10,0x08,0x10,0x0F,0xF0,0x08,0x10,0x08,0x90,0x08,0x70,0x08,0x20,
-
- /*-- 文字: 限 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0xFB,0xF8,0x92,0x08,0x93,0xF8,0xA2,0x08,0xA2,0x08,0x93,0xF8,0x8A,0x80,
- 0x8A,0x48,0xAA,0x50,0x92,0x20,0x82,0x20,0x82,0x10,0x82,0x8E,0x83,0x04,0x82,0x00,
-
- /*-- 文字: 公 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x04,0x40,0x06,0x40,0x04,0x40,0x08,0x20,0x08,0x10,0x10,0x18,0x22,0x0E,
- 0x43,0x04,0x02,0x00,0x04,0x20,0x08,0x10,0x11,0xF8,0x3F,0x18,0x10,0x10,0x00,0x00,
-
- /*-- 文字: 司 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x3F,0xFC,0x00,0x04,0x00,0x04,0x7F,0xE4,0x00,0x04,0x00,0x04,0x3F,0xC4,
- 0x20,0x44,0x20,0x44,0x3F,0xC4,0x20,0x44,0x20,0x04,0x00,0x14,0x00,0x08,0x00,0x00,};
-
-
-
- for(j=0;j<31;j++,j++)
- {
- blank();
- for(i=0;i<15;i++)
- {
-
- writedat(word[j]);
-
- writecom(0xc0);
-
- writedat(word[j+1]);
-
- writecom(0xc0);
- }
- }
-
- delay();
- for(k=0;k<61;k++)
- {
- writed1d2(k,0x00); //图象首地址
- writecom(0x42);
- delay();
- }
-
-
- }
|