?? 哈爾濱工程大學完整顯示版_縱向取模handler.c
字號:
#include <REG89C51RD.H>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define W_COM XBYTE[0x7FFF]
#define W_DAT XBYTE[0x7eFF]
#define R_DAT XBYTE[0x7FFF]
uchar ScrAdrL;
uchar ScrAdrH;
void lcd_init();
void lcd_clear();
void WriteOneHZ(uint,uchar,uchar,uchar*);//光標指針地址低位,高位,字庫首地址
void MyDelay(uint);
uchar CurAdrL,CurAdrH ;
uchar code HA[]={
0x00,0x00,0xF0,0x91,0x92,0x9C,0x93,0x90,
0xF3,0x92,0x82,0x02,0x02,0x03,0x02,0x00,
0x40,0x40,0xA0,0x18,0x0E,0x04,0xF8,0x00,
0xF8,0x08,0x08,0x08,0x08,0xF8,0x08,0x00,/*"哈",0*/
};
uchar code ER[]={
0x04,0x06,0x08,0x0F,0x11,0x20,0x44,0x06,
0x04,0x08,0x10,0x20,0x40,0x00,0x02,0x01,
0x00,0x00,0x00,0xFE,0x04,0x88,0x80,0xA0,
0x90,0x88,0x8C,0x88,0x80,0x80,0x80,0x00,/*"爾",1*/
};
uchar code BIN[]={
0x40,0x20,0x27,0x84,0x40,0x01,0x11,0x11,
0x21,0x21,0xC7,0x40,0x40,0x41,0x42,0x4C,
0x40,0x20,0xFE,0x04,0x38,0xC0,0x00,0xFC,
0x10,0x10,0xFE,0x00,0x10,0x08,0x04,0x04/*"濱",2*/
};
uchar code GONG[]={
0x00,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,
0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,/*"工",3*/
};
uchar code CHENG[]={
0x0D,0x71,0x11,0x11,0xFD,0x11,0x30,0x3B,
0x54,0x50,0x93,0x10,0x10,0x10,0x17,0x10,
0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0xFC,
0x40,0x40,0xFC,0x40,0x40,0x40,0xFE,0x00,/*"程",4*/
};
uchar code DA[]={
0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x02,
0x02,0x02,0x04,0x04,0x08,0x10,0x20,0x40,
0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x80,
0x80,0x40,0x40,0x20,0x10,0x18,0x0E,0x04,/*"大",5*/
};
uchar code XUE[]={
0x01,0x10,0x0C,0x08,0x7F,0x40,0x8F,0x00,
0x00,0x7F,0x00,0x00,0x00,0x00,0x02,0x01,
0x08,0x8C,0xC8,0x90,0xFE,0x04,0xE8,0x40,
0x80,0xFE,0x80,0x80,0x80,0x80,0x80,0x00,/*"學",6*/
};
main()
{
lcd_init();
lcd_clear();
//test();
W_COM =0x4f; /*光標地址自動向下增=*/
WriteOneHZ(1,0,0,HA);
WriteOneHZ(1,2,0,ER);
WriteOneHZ(1,4,0,BIN);
WriteOneHZ(1,6,0,GONG);
WriteOneHZ(1,8,0,CHENG);
WriteOneHZ(1,0x0a,0,DA);
WriteOneHZ(1,0X0c,0,XUE);
//WriteOneHZ(0x0,0x80,BIN);
while(1);
}
void write_com(uchar com)
{
W_COM=com;
}
void write_dat(uchar dat)
{
W_DAT=dat;
}
uint read_dat()
{
uint dat;
dat=R_DAT;
return(dat);
}
void lcd_init(void)
{
write_com(0x40);/*初始化設置*/
write_dat(0x30);/*設置參數*/
write_dat(0x87);write_dat(0x07);write_dat(0x27);
write_dat(0x36);write_dat(239);write_dat(0x28);
write_dat(0x00);/*設置參數*/
write_com(0x44);/*顯示域設置*/
write_dat(0x00);write_dat(0x00);/*設置參數*/
write_dat(0x0f0);write_dat(0x80);write_dat(0x25);
write_dat(0xf0); write_dat(0x00);write_dat(0x4b);
write_dat(0x80);write_dat(0x70);/*設置參數*/
write_com(0x5a);/*點位移設置*/
write_dat(0x00);/*設置參數*/
write_com(0x5b);/*顯示合成設置*/
write_dat(0x0c);/*設置參數*/
lcd_clear();/*清屏子程序*/
write_com(0x59);/*開顯示*/
write_dat(0x54);/*設置參數*/
}
void lcd_clear(void)/*清屏程序*/
{
uint idata i;
write_com(0x4c);
write_com(0x46);
write_dat(0x00);
write_dat(0x00);
write_com(0x42);
for(i=0;i<0x8000;i++)
{write_dat(0x00);}
}
void test()
{
}
void PageEcode(unsigned int PgSel,unsigned char
OrdinatX,unsigned char OrdinatY) using 1
{
unsigned int PageTemp=0;
switch(PgSel)
{case 1://第l屏
PageTemp= OrdinatY*0x28+OrdinatX;
ScrAdrL=(unsigned char)(PageTemp%256);
ScrAdrH= (unsigned char)(PageTemp/256);
break;
case 2://第2屏
PageTemp = OrdinatY*0x28+ OrdinatX+0x2580;
ScrAdrL= (unsigned char)(PageTemp%256);
ScrAdrH= (unsigned char)(PageTemp/256);
break;
case 3://第3屏
PageTemp = OrdinatY*0x28+ OrdinatX + 0x4b00;
ScrAdrL= (unsigned char)(PageTemp%256);
ScrAdrH=(unsigned char)(PageTemp/256);
break;
default:
break;
}
}
void SetCursor(uint PagSel,uchar OrdinatX,uchar OrdinatY)/*設定光標,允許顯示*/
{
//MyDelay(0x9);
//PageEcode(PagSel,CurHIGH,CurLOW);//光標指針地址轉換為顯示屏坐標地址
unsigned int PageTemp=0;
switch(PagSel)
{case 1://第l屏
PageTemp= OrdinatY*0x28+OrdinatX;
ScrAdrL=(unsigned char)(PageTemp%256);
ScrAdrH= (unsigned char)(PageTemp/256);
break;
case 2://第2屏
PageTemp = OrdinatY*0x28+ OrdinatX+0x2580;
ScrAdrL= (unsigned char)(PageTemp%256);
ScrAdrH= (unsigned char)(PageTemp/256);
break;
case 3://第3屏
PageTemp = OrdinatY*0x28+ OrdinatX + 0x4b00;
ScrAdrL= (unsigned char)(PageTemp%256);
ScrAdrH=(unsigned char)(PageTemp/256);
break;
default:
break;
}
W_COM =0x46; /*設定光標位置命令*/
W_DAT=ScrAdrL; /*從0000位置開始*/
W_DAT=ScrAdrH;
//MyDelay(0x9);
W_COM =0x42; /*允許MPU連續地把顯示數據寫入顯示區內命令*/
}
void WriteOneHZ(uint PagSel,uchar CurHIGH,uchar CurLOW,uchar*ZiKu)/*在指定位置顯示=個漢字*/
{ uchar i;
SetCursor(PagSel,CurHIGH,CurLOW);
i=0;
do{W_DAT=ZiKu[i];
i++;}while(i<0x10);
SetCursor(PagSel,CurHIGH+1,CurLOW);
i=16;
do{W_DAT=ZiKu[i];
i++;}while(i<0x20);
}
void MyDelay(uint delx)/*延時子程序*/
{ uint i=0;
while(i<delx)
{i++;}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -