?? lm3033a.c
字號:
//------------------------------------------------------------------------------------------------// Topway Test Program// Copyright 2003.4.18 embedded Inc.//------------------------------------------------------------------------------------------------//The following is for LM3033a liquid crystal module drived by ST7920's LCD controller #include "../inc/LCD.h"#define uchar unsigned char#define uint unsigned int#define high 1#define low 0#define error 0#define true 1#define Port 0x03000000#define CS4_Var (Port|0x251a)#define Pwr_instr Port // 寫訪問:指令(A1=0 A2=0) #define Pwr_data (Port + (1<<2)) // 寫訪問:數據(A1=0 A2=1 )#define Prd_instr (Port + (1<<1)) // 讀訪問:指令(A1=1 A2=0)#define Prd_data (Port + (3<<1)) // 讀訪問:數據(A1=1 A2=1)uchar key1= 0;uchar key2= 0;uchar key3= 0;uchar key4= 0;uchar key_temp;uchar temp_Pwr_instr;uchar temp_P3;uchar error_num; //1:表示狀態忙判斷超時導致的錯誤; //2: //3: //4:void _nop_(){__asm("mov r0,r0");} //define variable//Define ctrlcode for SED5331:#define Lcd_ON 0xaf //顯示開uchar xinghao[14]={0xa3,0xcc,0xa3,0xcd,0xa3,0xb3,0xa3,0xb0,0xa3,0xb3,0xa3,0xb3,0xa1,0xa0};uchar company[]={0xd3,0xd0,0xcf,0xde,0xb9,0xab,0xcb,0xbe}; //有限公司uchar gosleep[16]={0xa3,0xc7,0xa3,0xef,0xa1,0xa1,0xa3,0xd3,0xa3,0xec,0xa3,0xe5,0xa3,0xe5,0xa3,0xf0}; //Go Sleepuchar ch_wakeup[14]={0xa3,0xd7,0xa3,0xe1,0xa3,0xeb,0xa3,0xe5,0xa1,0xa1,0xa3,0xd5,0xa3,0xf0}; //Wake Up//------------------------------------------------------------------------------------------------//------------------------------------------------------------------------------------------------//輔助函數//------------------------------------------------------------------------------------------------void delay100us(void) //delay TIMER1*1 ms for 12MHz{ uchar i; for(i=0;i<=250;i++) { _nop_();_nop_(); }}void delay1ms(void) //delay TIMER1*1 ms for 12MHz{ uchar i; for(i=0;i<=250;i++) { _nop_();_nop_(); }}void delay100ms(void){ uchar j; for(j=0;j<=250;j++) { delay1ms(); } }void delay500ms(){ uchar l; for(l=0;l<=50;l++) { delay100ms(); } }void delay1s(void){ uchar l; for(l=0;l<=200;l++) { delay100ms(); }}void test_LCD(void){ int *p; p = (int *)0xffe00000; *(p+4) = CS4_Var; // R/W enable CS4 *(p+9) = 0x4; // CS4(A) flow_init(); dis_char();// }//------------------------------------------------------------------------------------------------//指令和數據操作//------------------------------------------------------------------------------------------------void wr_command(uchar wr_data1){ char *p; p = (char *)Pwr_instr; *p = wr_data1; _nop_(); delay100us(); }void wr_data(uchar wr_data1){ char *p; p = (char *)Pwr_data; *p = wr_data1; _nop_(); delay100us(); }//------------------------------------------------------------------------------------------------void dis_interface_num(uchar data_temPwr_instr,uchar data_temp2){ uchar i,j; wr_command(0x30);delay100us(); wr_command(0x34);delay100us(); //設定繪圖顯示off wr_command(0x01);delay100ms(); //delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();//清除顯示 wr_command(0x02);delay100us(); //地址歸位 wr_command(0x36);delay100us(); //設定繪圖顯示off for(i=0;i<=31;i++) { for(j=0;j<=18;j++) { wr_command(0x80+i); wr_command(0x80+j); wr_data(data_temPwr_instr); wr_data(data_temp2); } } wr_command(0x36);delay100us(); //設定繪圖顯示ON // }void dis_hen_num(uchar data_temPwr_instr,uchar data_temp2){ uchar i,j; // wr_command(0x30);delay100us(); wr_command(0x34);delay100us(); //設定繪圖顯示off wr_command(0x01);delay100ms();//delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();//清除顯示 wr_command(0x02);delay100us(); //地址歸位 wr_command(0x36);delay100us(); //設定繪圖顯示off for(i=0;i<=31;i++) { for(j=0;j<=15;j++) { wr_command(0x80+i); wr_command(0x80+j); wr_data(data_temPwr_instr); wr_data(data_temPwr_instr); } i++; for(j=0;j<=15;j++) { wr_command(0x80+i); wr_command(0x80+j); wr_data(data_temp2); wr_data(data_temp2); } } wr_command(0x36);delay100us(); //設定繪圖顯示ON // }//------------------------------------------------------------------------------------------------//測試程序//------------------------------------------------------------------------------------------------void dis_interface(uchar dis_number) //測試點陣 screen number:2,6,7,10,11,12,13{ wr_command(0x0c);delay100us(); switch(dis_number) { case 1: dis_interface_num(0xff,0xff);break; case 2: dis_interface_num(0x00,0x00);break; case 3: dis_interface_num(0x55,0x55);break; case 4: dis_interface_num(0xaa,0xaa);break; case 5: dis_hen_num(0xff,0x00);break; case 6: dis_hen_num(0x00,0xff);break; case 7: dis_hen_num(0xaa,0x55);break; case 8: dis_hen_num(0x55,0xaa);break; default: error_num=2;break; }}void dis_char() //顯示公司名稱{ uchar i=0,j=0; // wr_command(0x30);delay100us(); //指令集 wr_command(0x30);delay100us(); //指令集 wr_command(0x01);delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms(); //清除顯示 wr_command(0x02);delay100us(); wr_command(0x80);//delay100us(); //wr_data(0xa1);wr_data(0xa0); for(i=0;i<=7;i++) { wr_data(company[i*2]);wr_data(company[i*2+1]); } for(i=0;i<=6;i++) { wr_data(0xa1);wr_data(0xa0); } wr_command(0x02);delay100us(); wr_command(0x90);//delay100us(); wr_data(0xa1);wr_data(0xa0); for(i=0;i<=6;i++) { wr_data(xinghao[i*2]);wr_data(xinghao[i*2+1]); } for(i=0;i<=6;i++) { wr_data(0xa1);wr_data(0xa0); } wr_command(0x0c); keyfun(); wr_command(0x01);delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms(); //清除顯示 wr_command(0x02);delay100us();}void dis_gosleep() //顯示gosleep{ uchar i=0,j=0; uchar cg_add=0x90; wr_command(0x36); //擴充指令集 wr_command(0x30);delay100us(); //指令集 wr_command(0x30);delay100us(); //指令集 wr_command(0x01);delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms(); //清除顯示 wr_command(0x02); wr_command(cg_add); //wr_data(0xa1);wr_data(0xa0); for(i=0;i<=7;i++) { wr_data(gosleep[i*2]);wr_data(gosleep[i*2+1]); } for(i=0;i<=6;i++) { //cg_add |=0x60; wr_data(0xa1);wr_data(0xa0); } wr_command(0x0c);delay500ms(); keyfun(); wr_command(0x01); delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms(); //清除顯示// }void dis_wakeup() //顯示wakeup{ uchar i=0,j=0; uchar cg_add=0x90; //wr_command(0x34); //擴充指令集 wr_command(0x30);delay100us(); //指令集 wr_command(0x30);delay100us(); //指令集 //wr_command(0x01);delay1ms();delay1ms();delay1ms();delay1ms(); //清除顯示 wr_command(0x02); wr_command(cg_add); wr_data(0xa1);wr_data(0xa0); for(i=0;i<=6;i++) { wr_data(ch_wakeup[i*2]);wr_data(ch_wakeup[i*2+1]); } for(i=0;i<=7;i++) { //cg_add |=0x60; wr_data(0xa1);wr_data(0xa0); } wr_command(0x0c);delay500ms(); keyfun(); wr_command(0x01);delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();//清除顯示// }void dis_all() //顯示所有字模{ uchar i=0,j=0; uchar cg_add=0x90; dis_interface(2); /// cg_add=0x0; wr_command(0x80); //設定繪圖顯示off wr_command(0x30);delay100us(); //DataLength=8bit, CommandSet=Basic wr_command(0x01);delay100us(); //清除顯示 wr_command(0x02); //地址歸位 wr_command(0x0c); //整體顯示ON wr_command(0x07); //畫面整體左移 for(j=0;j<=0x47;j++) { for(i=0;i<=0x50;i++) { wr_data(0xb0+j);wr_data(0xa0+i);delay100ms();delay100ms(); } } }void dis_frame() //顯示外框{ //uchar data_temPwr_instr,uchar data_temp2; uchar i,j; // wr_command(0x30);delay100us(); wr_command(0x34);delay100us(); //設定繪圖顯示off //wr_command(0x30);delay100us();wr_command(0x30);delay100us(); wr_command(0x01);delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();//清除顯示 wr_command(0x02);delay100us(); //地址歸位 for(i=0;i<=31;i++) { wr_command(0x80+i); wr_command(0x80); for(j=0;j<=15;j++) { wr_data(0); wr_data(0); } } wr_command(0x80); wr_command(0x80); for(i=0;i<=15;i++) { wr_data(0xff); wr_data(0xff); } for(i=1;i<=30;i++) { wr_command(0x80+i); wr_command(0x80); wr_data(0x80); wr_data(0); for(j=0;j<=13;j++) {wr_data(0); wr_data(0); } wr_command(0x80+i); wr_command(0x80+7); wr_data(0); wr_data(1); wr_command(0x80+i); wr_command(0x80+8); wr_data(0x80); wr_data(0); wr_command(0x80+i); wr_command(0x80+15); wr_data(0); wr_data(1); } wr_command(0x80+31); wr_command(0x80); for(i=0;i<=15;i++) { wr_data(0xff); wr_data(0xff); } wr_command(0x36); //設定繪圖顯示ON // }//--------------------------------------------------------------------------------------uchar light_temp=0x018;uchar key2_t=0;uchar key3_t=0;void up_dis(){ if(key2) { key2=0; key2_t++; if(key2_t>=40) { key2_t=0; if(light_temp <= 0x1f) { light_temp +=1; wr_command(0x80|light_temp); } } }}void down_dis(){ if(key3) { key3=0; key3_t++; if(key3_t>=40) { key3_t=0; if(light_temp > 1) { light_temp -=1; wr_command(0x80|light_temp); } } }}void keyfun(){ if(key1) //如果按下,即key1=1,表示處于單步狀態 { for(;;) { up_dis();down_dis(); if(key4) {key4=0; break;} if(!key1) {break;} //if(key2) break; } } if(!key1) delay500ms();}void sleep(){ dis_interface_num(0x00,0x00); wr_command(0x01);delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms(); //清除顯示 wr_command(0x02); //地址歸位 wr_command(0x34); //擴充指令集 wr_command(0x08); //睡眠}void wakeup(){ wr_command(0x34); //擴充指令集 wr_command(0x0c); //退出睡眠}//------------------------------------------------------------------------------------------------//顯示屏初始化//------------------------------------------------------------------------------------------------void flow_init(void){ delay1ms(); delay1ms(); // give our RES signal wr_command(0x30);delay100us(); //基本指令集 wr_command(0x30);delay100us(); //指令集 wr_command(0x30);delay100us(); //指令集 wr_command(0x30);delay100us(); //指令集 //wr_command(0x02);delay100us(); //地址歸位 wr_command(0x01);delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms();delay1ms(); //清除顯示 wr_command(0x06);delay100us(); //右移 //wr_command(0x07);delay100us(); //畫面整體右移 //wr_command(0x0c);delay100us(); //整體顯示ON //wr_command(0x34); //擴充指令集 //wr_command(0x30); //基本指令集 _nop_();}//------------------------------------------------------------------------------------------------//主程序//------------------------------------------------------------------------------------------------void test_LCD_(void){ int *p = (int *)0xffe00000; *(p+4) = CS4_Var; // R/W enable CS4 *(p+9) = 0x4; // CS4 flow_init(); while(1) { dis_char();// keyfun();// delay1s(); dis_frame();delay500ms();// //display frame keyfun();// //delay1s(); dis_interface(1);delay500ms();// //screen number:2,6,7,10,11,12,13 keyfun();// delay1s(); dis_interface(2);delay500ms();// //screen number:2,6,7,10,11,12,13 keyfun();// //delay1s(); dis_interface(3);delay500ms();// //screen number:2,6,7,10,11,12,13 keyfun();// //delay1s(); dis_interface(4);delay500ms();// //screen number:2,6,7,10,11,12,13 keyfun();// //delay1s(); dis_interface(5);delay500ms();// //screen number:2,6,7,10,11,12,13 keyfun();// //delay1s(); dis_interface(6);delay500ms();// //screen number:2,6,7,10,11,12,13 keyfun();// //delay1s(); dis_interface(7);delay500ms();// //screen number:2,6,7,10,11,12,13 keyfun();// //delay1s(); dis_interface(8);delay500ms();// //clear keyfun();// //delay1s(); //dis_gosleep(); //sleep();delay500ms();// //screen number:2,6,7,10,11,12,13 //keyfun();// //dis_wakeup(); //delay500ms();wakeup();TR0 = 1; /* stop timer 0 */ //wr_command(0x07);delay100us(); //右移 dis_all(); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -