(stc15f2k60s2)玩了两个月才出来的LCD12232(附原理图 程序)
电路原理图如下:
单片机源程序如下:
- #include"LCD12232.H"
- unsigned char code wo[]=
- {0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0xFF,0x20,0x22,0xAC,0x20,0x30,0x20,0x00,
- 0x00,0x08,0x48,0x84,0x7F,0x02,0x21,0x10,0x09,0x06,0x1A,0x61,0x80,0xE0,0x00,0x00};//我 字模
- unsigned char code yeah[4][16]=
- {
- {/* ASCII 8x16点阵字库*/
- /* Y[0x0059] 8x16 */
- 0x00,0x3C,0x7C,0xC0,0xC0,0x7C,0x3C,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,},
- {/* ASCII 8x16点阵字库*/
- /* e[0x0065] 8x16 */
- 0xC0,0xE0,0xA0,0xA0,0xA0,0xE0,0xC0,0x00,0x07,0x0F,0x08,0x08,0x08,0x0C,0x04,0x00,},
- {/* ASCII 8x16点阵字库*/
- /* a[0x0061] 8x16 */
- 0x00,0xA0,0xA0,0xA0,0xE0,0xC0,0x00,0x00,0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00,},
- {/* ASCII 8x16点阵字库*/
- /* h[0x0068] 8x16 */
- 0x04,0xFC,0xFC,0x40,0x20,0xE0,0xC0,0x00,0x08,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,},
- } ;
- unsigned char code gantan[7][32]=
- {
- {/* GB2312 16x16点阵字库*/
- /* 终[0xD6D5] 16x16 */
- 0x20,0x30,0xAC,0x63,0x20,0x10,0x20,0x18,0x17,0xA4,0x44,0xB4,0x0C,0x04,0x00,0x00,
- 0x22,0x63,0x22,0x12,0x12,0x12,0x04,0x02,0x21,0x24,0x44,0x48,0x93,0x06,0x02,0x00,
- /* GB2312 16x16点阵字库*/},
- /* 于[0xD3DA] 16x16 */
- {0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x43,0x42,0x60,0x40,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /* GB2312 16x16点阵字库*/},
- {/* GB2312 16x16点阵字库*/
- /* 把[0xB0D1] 16x16 */
- 0x10,0x10,0x10,0xFF,0x90,0x50,0x00,0xFC,0x84,0x84,0xFC,0x84,0x84,0xFE,0x04,0x00,
- 0x02,0x42,0x81,0x7F,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x41,0x70,0x00,},
- {/* GB2312 16x16点阵字库*/
- /* 你[0xC4E3] 16x16 */
- 0x40,0x20,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,
- 0x00,0x00,0xFF,0x00,0x00,0x08,0x04,0x43,0x80,0x7F,0x00,0x01,0x06,0x0C,0x00,0x00,},
- {/* 点[0xB5E3] 16x16 */
- 0x00,0x00,0xC0,0x40,0x40,0x40,0x7F,0x48,0x48,0x48,0x48,0xE8,0x4C,0x08,0x00,0x00,
- 0x80,0x40,0x37,0x04,0x14,0x64,0x04,0x14,0x24,0x64,0x04,0x17,0x20,0xC0,0x00,0x00,},
- {/* GB2312 16x16点阵字库*/
- /* 亮[0xC1C1] 16x16 */
- 0x00,0x02,0x02,0x7A,0x4A,0x4A,0x4A,0x4B,0x4A,0x4A,0x4A,0x7E,0x0B,0x02,0x00,0x00,
- 0x04,0x83,0x81,0x41,0x3D,0x05,0x05,0x05,0x05,0x05,0x7F,0x85,0x81,0x85,0xE3,0x00,
- /* GB2312 16x16点阵字库*/},
- {/* GB2312 16x16点阵字库*/
- /* 了[0xC1CB] 16x16 */
- 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xE2,0x22,0x12,0x0A,0x06,0x02,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},
- } ;
- unsigned char code by[2][16]=
- {
- {/* ASCII 8x16点阵字库*/
- /* B[0x0042] 8x16 */
- 0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0x00,0x08,0x0F,0x0F,0x08,0x08,0x0F,0x07,0x00,},
- {/* y[0x0079] 8x16 */
- 0xE0,0xE0,0x00,0x00,0x00,0xE0,0xE0,0x00,0x47,0x4F,0x48,0x48,0x68,0x3F,0x1F,0x00,}
- };
- sbit a0=P3^4;
- sbit e1=P5^4;
- sbit e2=P5^5;
- //*****************************************************************
- //转换P4口与data的不一致问题
- //*****************************************************************
- unsigned char zhuan_huan(unsigned char dat)
- {
- unsigned char a=0x00;
- a=a|((dat&0x10)>>4);//P40送出dat[4] 也就是a[0]=dat[4]
- a=a|((dat&0x04)>>1);//a[1]=dat[2]
- a=a|((dat&0x20)>>3);//a[2]=dat[5]
- a=a|((dat&0x80)>>4);//a[3]=dat[7]
- a=a|((dat&0x40)>>2);//a[4]=dat[6]
- a=a|((dat&0x01)<<5);//a[5]=dat[0]
- a=a|((dat&0x02)<<5);//a[6]=dat[1]
- a=a|((dat&0x08)<<4);//a[7]=dat[3]
- return a;
- }
- //*****************************************************************
- //延时函数1ms stc15单片机
- //*****************************************************************
- void delay(unsigned int t)
- {
- unsigned char i, j,k;
- for(k=0;k<t;k++)
- {
- _nop_();
- _nop_();
- _nop_();
- i = 11;
- j = 190;
- do
- {
- while (--j);
- } while (--i);
- }
- }
- //*****************************************************************
- //写命令
- //*****************************************************************
- void write_command(unsigned char com,unsigned char flag)
- {
- if (flag==0) //对左屏操作
- {
- a0=0;
- data_port=zhuan_huan(com);
- e1=1;
- e2=0;
- delay(2);
- e1=0;
- }
- else if(flag==1) //右屏操作
- {
- a0=0;
- data_port=zhuan_huan(com);
- e2=1;
- e1=0;
- delay(2);
- e2=0;
- }
- else if(flag==2) //both
- {
- a0=0;
- data_port=zhuan_huan(com);
- e2=1;
- e1=1;
- delay(2);
- e1=0;
- e2=0;
- }
- }
- //*****************************************************************
- //写数据
- //*****************************************************************
- void write_data(unsigned char dat,unsigned char flag)
- {
- if (flag==0) //对左屏操作
- {
- a0=1;
- data_port=zhuan_huan(dat);
- e1=1;
- e2=0;
- delay(2);
- e1=0;
- }
- else if(flag==1)
- {
- a0=1;
- data_port=zhuan_huan(dat);
- e2=1 ;
- e1=0;
- delay(2);
- e2=0;
- }
- else if(flag==2)
- {
- a0=1;
- data_port=zhuan_huan(dat);
- e2=1;
- e1=1 ;
- delay(2);
- e1=0;
- e2=0;
- }
- }
- //*****************************************************************
- //在某行某列写字符
- //*****************************************************************
- void write_zifu(unsigned char flag,unsigned char x,unsigned char y, unsigned char code *zf)
- {
- unsigned char i;
- unsigned char j;
- if(x==2)
- x=0;
- for(i=0;i<2;i++)
- {
- write_command(page_add+2*x+i,flag);
- write_command(col_add+8*y,flag);
- for(j=0;j<8;j++)
- {
- // write_command(col_add+16*y+j,flag);
- write_data(zf[8*i+j],flag);
- }
- }
- }
- //*****************************************************************
- //写字符 行范围1-2,列范围0-7
- //*****************************************************************
- void write_hanzi(unsigned char flag,unsigned char x,unsigned char y, unsigned char code *hz)
- //flag显示在哪个屏幕上 x为行0 1;y为列:0 1 2
- {
- unsigned char i;
- unsigned char j;
- if(x==2)
- x=0;
- for(i=0;i<2;i++)
- {
- write_command(page_add+2*x+i,flag);
- write_command(col_add+16*y,flag);
- for(j=0;j<16;j++)
- {
- // write_command(col_add+16*y+j,flag);
- write_data(hz[16*i+j],flag);
- }
- }
- }
-
- //*****************************************************************
- //清屏函数
- //*****************************************************************
- void lcd_clc(void) //清屏
- {
- unsigned char i,j;
- for(j=0;j<4;j++) //四页
- {
- write_command(page_add+j,2);
- for(i=0;i<80;i++)
- {
- write_command(col_add+i,2);
- write_data(0x00,2);
- }
- }
- }
- //*****************************************************************
- //初始化函数
- //*****************************************************************
- void lcd_initial(void)
- {
- P5M0=0Xff;
- P5M1=0X00;
- P3M0=0Xff;
- P3M1=0X00;
- P4M0=0Xff;
- P4M1=0X00; //全部为推挽输出
- write_command(0xa4,2);//正常驱动
- write_command(0xa9,2);//1/32duty 每个com的占空比
- write_command(0xa0,2);//显示方向为a1正向a0反向
- write_command(start_line,2);//设置显示行
- write_command(page_add,2);
- write_command(col_add,2);
- write_command(0xaf,2); //开显示
- write_command(0xee,2);
- lcd_clc();
- }
复制代码
word格式的原理图与Keil代码下载:
LCD12232_stc15.rar
(78.69 KB, 下载次数: 71)
|