收了几块T6963C控制的点阵液晶屏,研究了两天,终于弄了点小眉目,现在将程序及仿真放上来,供参考
单片机源程序如下:
- #include<stdio.h> //NULL 的引用
- #include<intrins.h>
- #include<ABSACC.H> //XBYTE[]的引用
- #define uchar unsigned char
- #define uint unsigned int
-
- #define lcmcom XBYTE[0x3fff] /*T6963C 写命令口地址,读数据口地址*/
- #define lcmdata XBYTE[0x3eff] /*T6963C 写数据口地址*/
- uchar code table[]=
- {
- /*---转换字符 *姓名*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xC6,0x6C,0x38,0x38,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00, // -x-
- /*---转换字符 * 姓名*/
- 0x00,0x00,0x00,0x00,0x00,0xFE,0xCC,0x18,0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00, // -z-
- 0x00,0x00,0x38,0x6C,0x64,0x60,0xF0,0x60,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00, // -f-
- /*---转换字符 制 ---*/
- 0x04,0x24,0x25,0x3F,0x24,0x44,0xFF,0x04,0x3F,0x24,0x24,0x24,0x26,0x25,0x04,0x04,
- 0x04,0x04,0x04,0xA4,0x24,0xA4,0xE4,0x24,0xA4,0xA4,0xA4,0x84,0x84,0x04,0x14,0x08,
- /*---转换字符 作 ---*/
- 0x09,0x09,0x09,0x11,0x12,0x32,0x54,0x98,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
- 0x00,0x00,0x04,0xFE,0x80,0x80,0x90,0xF8,0x80,0x80,0x88,0xFC,0x80,0x80,0x80,0x80
- };
- void busy_lcm(uchar flag)
- {
- uchar i;
- i=flag;
- while(i==lcmcom&flag);
- }
- void write_lcm(uchar count,uchar com,uchar data1,uchar data2)
- {
- switch(count)
- {
- case 1: busy_lcm(0x3); lcmcom=com;
- break;
- case 2: busy_lcm(0x3); lcmdata=data1; busy_lcm(0x3); lcmcom=com;
- break;
- case 3: busy_lcm(0x3); lcmdata=data1; busy_lcm(0x3); lcmdata=data2; busy_lcm(0x3);
- lcmcom=com;
- break;
- default:break;
- }
- }
-
- void clear_lcm()
- {
- uint i;
- write_lcm(3,0x24,0x00,0x00); /*设置显示RAM 首地址*/
- write_lcm(1,0xb0,NULL,NULL); /*设置自动写方式*/
- for (i=0;i<3840;i++) /*最大显示点阵为:240*128/8=3840;128×64/8=1024*/
- {
- busy_lcm(0x0c);
- lcmdata=0x0; /*写00H 清屏*/
- }
- busy_lcm(0x0c);
- lcmcom=0xb2; /*设置自动写结束*/
- }
- void init_lcm()
- {
- write_lcm(1,0xa1,NULL,NULL); //设置光标形状为8(列)×1(行)
- write_lcm(3,0x21,0x00,0x00); //设置光标指针
- write_lcm(3,0x40,0x00,0x00); //设置文本显示区域首址
- write_lcm(3,0x41,0x01,0x00); // 设置文本区宽度
- write_lcm(3,0x42,32,0x00); //设置图形显示区域首址为32
- write_lcm(3,0x24,32,0x00); // 设置地址指针位置为32
- write_lcm(3,0x43,30,0x0); //设置图形显示区域宽度为30 字节
- write_lcm(1,0x80,NULL,NULL); //设置显示为逻辑“或”方式
- write_lcm(1,0x9c,NULL,NULL); //设置显示开关,图形/文本显示均开启
- }
- /********************************************************************
- 显示一个汉字
- *********************************************************************/
- void display_1c(uchar caddr,uchar x,uchar y) //控制汉字
- {
- uchar i,j,*p;uint w;
- p=table+caddr*32;
- x=x<<1; //可灵活调节循环左移
- for(i=0;i<=1;i++)
- {
- x=x+i;
- for(j=0;j<16;j++)
- {
- w=y*16*30+x+32+j*30;
- write_lcm(3, 0x24, w%256, w>>8);
- write_lcm(2, 0xc2, *p, NULL);
- p++;
- }
- }
- }
复制代码
所有资料51hei提供下载:
T6963C控制的PG12864,显示中英文加汉字.rar
(69.96 KB, 下载次数: 140)
|