?? zz10_lcd1.c
字號:
#include "p30f6014.h"
int failmemory[40];
#define LCD_SW PORTDbits.RD6 //LED背光,低有效
#define LCD_DI PORTDbits.RD3 //指令/數據,低為數據
#define LCD_RW PORTDbits.RD4 //讀/寫,低為寫
#define LCD_E PORTDbits.RD5 //使能信號,下降沿寫入
const char table1[300]={
0x08,0x08,0x0A,0xEA,0xAA,0xAA,0xAA,0xFF,0xA9,0xA9,0xA9,0xE9,0x08,0x08,0x08,0x00,
0x40,0x40,0x48,0x4B,0x4A,0x4A,0x4A,0x7F,0x4A,0x4A,0x4A,0x4B,0x48,0x40,0x40,0x00,
// 重
0x00,0x00,0xFC,0x44,0x44,0x44,0x44,0xC5,0x7E,0xC4,0x44,0x44,0x44,0x44,0x44,0x00,
0x40,0x30,0x0F,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x18,0x30,0x60,0x20,0x00,
// 慶
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,
// 大
0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
// 學
};
void ReadLcdState (int E) //讀狀態字,判斷忙否,E為區分左右
{
unsigned long int i = 0;
int STAFLAG;
TRISD = 0xff00; //D0~D7輸入
if(E==1)
PORTD = (PORTD&0xfff8)|0x0004; //CSA=0,CSB=1左
else
PORTD = (PORTD&0xfff8)|0x0005; //CSA=1,CSB=0右
LCD_RW = 1;
LCD_DI = 0;
while(1)
{
LCD_E = 1;
for(i=0; i<2; i++){}
LCD_E = 0;
STAFLAG = PORTD&0x8000; // 讀液晶狀態
if(STAFLAG==0x0000)break;
}
}
void WriteLcdIns (int INS,int E) //寫指令,E為區分左右
{
unsigned long int i = 0;
ReadLcdState (E);
TRISD = 0x0000; //D0~D7輸出
if(E==1)
PORTD = (PORTD&0xfff8)|0x0004; //CSA=0,CSB=1左
else
PORTD = (PORTD&0xfff8)|0x0005; //CSA=1,CSB=0右
LCD_RW = 0;
LCD_DI = 0;
LCD_E = 1;
PORTD = (PORTD&0x00ff)|((INS<<8)&0xff00); // 指令寫入LCD
for(i=0; i<2; i++){}
LCD_E = 0;
}
void WriteLcdData (int DATA,int Yaddress,int E) //寫數據,E為區分左右
{
unsigned long int i = 0;
WriteLcdIns(Yaddress,E); //設置列地址
ReadLcdState (E); //查詢液晶是否為空閑
TRISD = 0x0000; //D0~D7輸出
if(E==1)
PORTD = (PORTD&0xfff8)|0x0004; //CSA=0,CSB=1左
else
PORTD = (PORTD&0xfff8)|0x0005; //CSA=1,CSB=0右
LCD_RW = 0;
LCD_DI = 1;
LCD_E = 1;
PORTD=(PORTD&0x00ff)|((DATA<<8)&0xff00);// 數據寫入LCD
for(i=0; i<2; i++){}
LCD_E = 0;
}
void OffLcdDis (int E) //關顯示
{
unsigned long int i = 0;
int STAFLAG;
while(1)
{
WriteLcdIns (0X3E,E); //寫指令:關閉顯示
ReadLcdState (E); //查詢液晶是否為空閑
TRISD = 0xff00;//D0~D7輸入
if(E==1)
PORTD = (PORTD&0xfff8)|0x0004; //CSA=0,CSB=1左
else
PORTD = (PORTD&0xfff8)|0x0005; //CSA=1,CSB=0右
LCD_RW = 1;
LCD_DI = 0;
LCD_E = 1;
for(i=0; i<2; i++){}
LCD_E = 0;
STAFLAG = PORTD&0X2000; // 讀液晶狀態
if(STAFLAG==0X2000)break; //如液晶關閉,則退出循環
}
}
void OpenLcdDis (int E) //開顯示
{
unsigned long int i = 0;
int STAFLAG;
while(1)
{
WriteLcdIns (0x3F,E); //寫指令:LCD顯示RAM中的內容
ReadLcdState (E); //查詢液晶是否為空閑
TRISD = 0xff00;//D0~D7輸入
if(E==1)
PORTD = (PORTD&0xfff8)|0x0004; //CSA=0,CSB=1左
else
PORTD = (PORTD&0xfff8)|0x0005; //CSA=1,CSB=0右
LCD_RW = 1;
LCD_DI = 0;
LCD_E = 1;
for(i=0; i<2; i++){}
LCD_E = 0;
STAFLAG = PORTD&0x2000;// 讀液晶狀態
if(STAFLAG==0x0000)break; //如果液晶被打開,則退出循環
}
}
void ClrLcdDis (int E) //清屏
{
int PAGENUM; //頁地址B8~BF
int Yaddress; // Y地址40~7F
for (PAGENUM=0xB8; PAGENUM<=0xBF; PAGENUM++)
{
WriteLcdIns (PAGENUM, E); //設置相應的頁地址
for (Yaddress=0x40; Yaddress<=0x7F; Yaddress++)
{
WriteLcdData(0x00, Yaddress, E); //送0清屏
}
}
}
void LCDinit (int E) // LCD初始化子程序
{
OffLcdDis (E); //關顯示
WriteLcdIns (0x0A4,E); //設置顯示驅動,占空比,復位,ADC選擇等
WriteLcdIns (0x0A9,E);
WriteLcdIns (0x0E2,E);
WriteLcdIns (0x0A0,E);
ClrLcdDis (E); //清屏
OpenLcdDis (E); //開顯示
}
void DISPLAY(int n,int E,int PAGADD,int Yaddress) // 送顯漢字子程序
{
int K;
char TEMP;
WriteLcdIns (0X0c0,E);
WriteLcdIns (PAGADD,E);
n=n*32;
for(K=0;K<16;K++,Yaddress++)
{
TEMP=table1[K+n];
WriteLcdData (TEMP,Yaddress,E);
}
Yaddress=Yaddress-16;
PAGADD=PAGADD+1;
WriteLcdIns (PAGADD,E);
for(;K<32;K++,Yaddress++)
{
TEMP=table1[K+n];
WriteLcdData (TEMP,Yaddress,E);
}
WriteLcdIns (0X0C0,E);
PAGADD=PAGADD-1;
WriteLcdIns (PAGADD,E);
}
main()
{
INTCON1=0x0000;
INTCON2=0x0000; //關閉所有中斷
LCDinit(1); // LCD初始化子程序
LCDinit(2);
LCD_SW = 0; // 開背光
DISPLAY (0,1,0xBA,0x47);//重
DISPLAY (1,1,0xBA,0x67);//慶
DISPLAY (2,2,0xBA,0x47);//大
DISPLAY (3,2,0xBA,0x67);//學
for( ; ; ){}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -