?? fm12864.c
字號:
#include<intrins.h>
#include<ziku.c>
#define uchar unsigned char
#define uint unsigned int
/**************************************************************
*12864液晶的定義(T6963驅動) *
***************************************************************/
sbit REST = P2^0; //Reset signal, active"L"
sbit C_D = P2^1; //L:data H:code
sbit C_E = P2^2; //Chip enable signal, active"L"
sbit R_D = P2^3; //read signal, active"L"
sbit W_R = P2^4; //write signal, active"L"
#define width 15 //顯示區寬度
#define Graphic 1
#define TXT 0
#define LcmLengthDots 128
#define LcmWidthDots 64
/**************************12864液晶的相關函數**********************/
void delay_nms(uint i)
{
while(i)
i--;
}
void write_commond(uchar com) //對液晶寫一個指令
{
C_E = 0;
C_D = 1;
R_D = 1;
P0 = com;
W_R = 0; // write
_nop_();
W_R = 1; // disable write
C_E = 1;
C_D = 0;
}
void write_date(uchar dat) //對液晶寫一個數據
{
C_E = 0;
C_D = 0;
R_D = 1;
P0 = dat;
W_R = 0;
_nop_();
W_R = 1;
C_E = 1;
C_D = 1;
}
void write_dc(uchar com,uchar dat) //寫一個指令和一個數據
{
write_date(dat);
write_commond(com);
}
//寫一個指令和兩個數據
void write_ddc(uchar com,uchar dat1,uchar dat2)
{
write_date(dat1);
write_date(dat2);
write_commond(com);
}
//LCD初始化函數
void F12864_init(void)
{
REST = 0;
delay_nms(2000);
REST = 1;
write_ddc(0x40,0x00,0x00); //設置文本顯示區首地址
write_ddc(0x41,128/8,0x00); //設置文本顯示區寬度
write_ddc(0x42,0x00,0x08); //設置圖形顯示區首地址0x0800
write_ddc(0x43,128/8,0x00); //設置圖形顯示區寬度
write_commond(0xA0); //設置光標形狀 8x8方塊
write_commond(0x80); //顯示方式設置 文本and圖形(異或)
write_commond(0x92); //設置光標
write_commond(0x9F); //顯示開關設置 文本開,圖形開,光標閃爍關
}
//**************************//清顯示存儲器函數
void F12864_clear(void)
{
unsigned int i;
write_ddc(0x24,0x00,0x00); //置地址指針為從零開始
write_commond(0xb0); //自動寫
for(i = 0;i < 128 * 64 ;i++)write_date(0x00); // 清一屏
write_commond(0xb2); // 自動寫結束
write_ddc(0x24,0x00,0x00); // 重置地址指針
}
//設定顯示的地址
void goto_xy(uchar x,uchar y,uchar mode)
{
uint temp;
temp = 128 / 8 * y + x;
if(mode) //mode = 1為Graphic
{ //如果圖形模式要加上圖形區首地址0x0800
temp = temp + 0x0100;
}
write_ddc(0x24,temp & 0xff,temp / 256); //地址指針位置
}
//顯示一個ASCII碼函數
void Putchar(uchar x,uchar y,uchar Charbyte)
{
goto_xy(x,y,TXT);
write_dc(0xC4,Charbyte-32); //數據一次讀寫方式//查字符rom
}
void display_string(uchar x,uchar y,uchar *p)
{
while(*p != 0)
{
if(x > 15 ) //自動換行 128*64
{
x = 0;
y++;
}
Putchar(x,y,*p);
++x;
++p;
}
}
//顯示一串漢字,j = k + n為(n為要顯示的字的個數),k為選擇從哪個字開始
void dprintf_hanzi_string_1(struct typFNT_GB16 code *GB_16,uint X_pos,uint Y_pos,uchar j,uchar k)
{
unsigned int address;
unsigned char m,n;
while(k < j)
{
m = 0;
address = LcmLengthDots / 8 * Y_pos + X_pos + 0x0800;
for(n = 0;n < 16;n++) //計數值16
{
write_ddc(0x24,(uchar)(address),(uchar)(address>>8)); //設置顯示存儲器地址
write_dc(0xc0,GB_16[k].Mask[m++]); //寫入漢字字模左部
write_dc(0xc0,GB_16[k].Mask[m++]); //寫入漢字字模右部
address = address + 128/8; //修改顯示存儲器地址,顯示下一列(共16列)
}
X_pos += 2;
k++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -