- //12864液晶的试验程序,驱动芯片为ST7920
- //目标板为TS8900-M128
- //驱动方式-并口
- //J1,J15,J8短路块位于左侧
- //调节RV1电位器调整对比度
- //注意:因为厂家不同液晶的19脚和20脚(背光)有时会不同,导致背光不亮,需要注意。
- #include <iom128v.h>
- #include <string.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define RS (1<<0)
- #define RW (1<<1)
- #define EN (1<<2)
- //延时函数
- void s_ms(uint ms)
- {
- for(;ms>1;ms--);
- }
- //此处定义字符串
- char text_1[]="液晶测试第一行";
- char text_2[]="液晶测试第二行";
- char text_3[]="液晶测试第三行";
- char text_4[]="液晶测试第四行";
- //写数据
- void WriteDataLCM(unsigned char WDLCM)
- {
- //ReadStatusLCM(); //检测忙
- s_ms(100);
- PORTC|=RS; //RS=1
- s_ms(100);
- PORTC&=~RW; //RW=0
- s_ms(100);
- PORTC|=EN; //EN=1
- s_ms(100);
- PORTA=WDLCM; //输出数据
- s_ms(100);
- PORTC&=~EN; //EN=0
- s_ms(100);
- }
- //写指令
- void WriteCommandLCM(unsigned char WCLCM)
- {
- //ReadStatusLCM(); //根据需要检测忙
- s_ms(100);
- PORTC&=~RS; //RS=0
- s_ms(100);
- PORTC&=~RW; //RW=0
- s_ms(100);
- PORTC|=EN; //EN=1
- s_ms(100);
- PORTA=WCLCM; //输出指令
- s_ms(100);
- PORTC&=~EN; //EN=0
- s_ms(100);
- }
- //读状态:检测忙
- void ReadStatusLCM(void)
- {
- uchar temp;
- uchar flag = 1;
- while(flag==1)
- {
- DDRA=0x00; //端口B改为输入
- PORTA=0xff;
- s_ms(100);
- PORTC&=~RS; //RS=0
- s_ms(100);
- PORTC|=RW; //RW=1
- s_ms(100);
- PORTC|=EN; //EN=1
- s_ms(1000);
- temp = PINA; //读端口B
- s_ms(1000);
- DDRA=0xff; //端口B改为
- s_ms(100);
- PORTC&=~EN; //EN=0
- s_ms(100);
- if(temp>>7==0)
- flag = 0;
- }
- }
- //LCM初始化
- void LCMInit(void)
- {
- WriteCommandLCM(0x38); //三次显示模式设置,不检测忙信号
- s_ms(1000);
- WriteCommandLCM(0x38);
- s_ms(1000);
- WriteCommandLCM(0x38);
- s_ms(1000);
- WriteCommandLCM(0x38); //显示模式设置,开始要求每次检测忙信号
- WriteCommandLCM(0x08); //关闭显示
- WriteCommandLCM(0x01); //显示清屏
- WriteCommandLCM(0x06); //显示光标移动设置
- WriteCommandLCM(0x0C); //显示开及光标设置
- }
- //按指定位置显示一串字符
- //液晶显示:汉字为16*16,字母及数字为8*16,此次显示的文本
- // 从第一行第一列开始,依次向左,如果想在不同的
- // 位置显示,只需修改相应的行值即可。液晶显示
- // 完毕后,转入语音文本发送。
- //DisplsyList(X,DData)函数:X为0x80在第一行显示;X为0x90在
- // 第二行显示;X为0x88在第三行显示;X为0x98在
- // 第四行显示;DData为显示数组。
- void DisplayList(unsigned char X,char *DData)
- {
- unsigned char length;
- unsigned char i=0;
- char *p;
- p = DData;
- length = strlen(p);
- WriteCommandLCM(0x08);
- WriteCommandLCM(X);
- WriteCommandLCM(0x06);
- WriteCommandLCM(0x0C);
- WriteCommandLCM(X);
- for(i=0;i<length;i++)
- {
- WriteDataLCM(DData[i]);
- i++;
- WriteDataLCM(DData[i]);
- }
- }
- //主函数
- void main(void)
- {
- //端口初始化
- DDRA=0xff;
- PORTA=0xff;
- DDRC=0xff;
- PORTC=0xff;
- DDRD=0xff;
- PORTD=0x00;
-
- s_ms(200);
- s_ms(200);
- LCMInit(); //LCM初始化 //液晶初始化
- DisplayList(0x80,text_1); //显示第一行
- DisplayList(0x90,text_2); //显示第二行
- DisplayList(0x88,text_3); //显示第三行
- DisplayList(0x98,text_4); //显示第四行
- while(1);
- }
复制代码 |