?? 12864_yejing.c
字號:
[源代碼]
//TX-1B實驗板12864液晶測試程序
//測試驅動液晶的程序. 在指定的位置顯示漢字
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code lcd_lattice16_16[]; //幾個函數聲明
unsigned char code lcd_letter_8_16[];
void display_8_16(uchar,uchar,uchar);
void displaycoslight(uchar);
unsigned char code lcd_lattice_coslight[15][320];
sbit CS1=P3^0; //液晶左半屏選擇
sbit CS2=P3^1; //液晶右半屏選擇
sbit RS=P3^5; //寫數據或命令選擇
sbit E=P3^4; //液晶使能
bit dot_not; //反白標志
void wrst_le(uchar date) //寫左部分狀態字
{
CS1=1;
CS2=0;
RS=0;
E=1;
P0=date;
E=0;
}
void wrst_ri(uchar date) //寫右部分狀態字
{
CS1=0;
CS2=1;
RS=0;
E=1;
P0=date;
E=0;
}
void wrda_le(uchar date) //寫左部分數據
{
CS1=1;
CS2=0;
RS=1;
E=1;
P0=date;
E=0;
}
void wrda_ri(uchar date) //寫右部分數據
{
CS1=0;
CS2=1;
RS=1;
E=1;
P0=date;
E=0;
}
void lcdinit() //初始化
{
wrst_le(0x3f);
wrst_ri(0x3f); /*display on*/
}
void displaycls(uchar background) //1清白屏,0清成黑屏
{
uchar i;
uchar j;
lcdinit();
wrst_le(0xc0);
wrst_ri(0xc0) ; //設置顯示起始行
for(i=0;i<8;i++)
{
wrst_le(0xb8|i); //設置頁地址
wrst_le(0x40|0); //設置列地址
for(j=0;j<64;j++)
{
if (background==0)
{
wrda_le(0xff);//清成白屏
}
else
{
wrda_le(0);//清成黑屏
}
}
}
for(i=0;i<8;i++)
{
wrst_ri(0xb8|i);//設置頁地址
wrst_ri(0x40|0);//設置列地址
for(j=0;j<64;j++)
{
if (background==0)
{
wrda_ri(0xff);//清成白屏
}
else
{
wrda_ri(0);//清成黑屏
}
}
}
}
void displayword(uchar lcdrow,uchar lcdline,uchar wordnumber)
{ //在指定的列和行顯示一個漢字
uchar i;
uint j;
if(lcdline<64)
{
lcdinit();
wrst_le(0xc0);
wrst_le(0xb8|lcdrow); //設置頁地址
wrst_le(0x40|lcdline); //設置列地址
j=(wordnumber-1)*32;
for(i=0;i<32;i++)
{
if(dot_not==1) wrda_le(~lcd_lattice16_16[i+j]);
else wrda_le(lcd_lattice16_16[i+j]);
if(i==15)
{
lcdinit();
wrst_le(0xb8|(lcdrow+1)); //設置頁地址
wrst_le(0x40|lcdline); //設置列地址
}
}
}
else
{
lcdinit();
wrst_ri(0xc0); //設置顯示起始行
wrst_ri(0xb8|lcdrow); //設置頁地址
wrst_ri(0x40|(lcdline-64)); //設置列地址
j=(wordnumber-1)*32;
for(i=0;i<32;i++)
{
if(dot_not==1)wrda_ri(~lcd_lattice16_16[i+j]);
else wrda_ri(lcd_lattice16_16[i+j]);
if(i==15)
{
wrst_ri(0xb8|(lcdrow+1)); //設置頁地址
wrst_ri(0x40|(lcdline-64));//設置列地址
}
}
}
}
void display_8_16(uchar lcdrow,uchar lcdline,uchar datanumber)
{ //在指定的列和行顯示一個字符
uchar i;
uint j;
if(lcdline<64)
{
wrst_ri(0xc0);
wrst_ri(0xb8|lcdrow);//設置頁地址
wrst_ri(0x40|lcdline);//設置列地址
j=datanumber;
j=(16*j);
for(i=0;i<16;i++)
{
if(dot_not) {wrda_ri(~lcd_letter_8_16[i+j]);}
else {wrda_ri(lcd_letter_8_16[i+j]);}
if(i==7)
{wrst_ri(0xb8|(lcdrow+1));//設置頁地址
wrst_ri(0x40|lcdline);//設置列地址
}
}
}
else if(lcdline<122)
{
wrst_le(0xc0);//設置顯示起始行
wrst_le(0xb8|lcdrow);//設置頁地址
if(lcdline<121)
{
wrda_le(0x40|(lcdline-64));//設置列地址
}
j=datanumber*16;
for(i=0;i<16;i++)
{
if(dot_not)
{
wrda_le(~lcd_letter_8_16[i+j]);
}
else {wrda_le(lcd_letter_8_16[i+j]);}
if(i==7)
{wrst_le(0xb8|(lcdrow+1));//設置頁地址
wrst_le(0x40|(lcdline-64));//設置列地址
}
}
}
}
void displaycoslight(uchar which_bmp) //顯示一幅圖像函數
{
uchar i;
uchar j;
wrst_le(0xc0);
wrst_ri(0xc0);/*設置顯示起始行*/
for(i=1;i<6;i++)
{
wrst_ri(0xb8|i);/*設置頁地址*/
wrst_ri(0x40|32);/*設置列地址*/
for(j=0;j<32;j++)
{
wrda_ri(lcd_lattice_coslight[which_bmp][(64*(i-1))+j]);
}
wrst_le(0xb8|i);/*設置頁地址*/
wrst_le(0x40|00);/*設置列地址*/
for(j=32;j<64;j++)
{
wrda_le(lcd_lattice_coslight[which_bmp][(64*(i-1))+j]);
}
}
}
/***********************************************************/
unsigned char code lcd_lattice_coslight[15][320]={
/*--調入了一幅圖像:
/*-- 寬度x高度=64x40 --*/
//編碼略
};
///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
unsigned char code lcd_letter_8_16[]=
{
/*-- 文字: 0 -- 0 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,
0x20,0x20,0x10,0x0F,0x00,//其余字庫略
};
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
unsigned char code lcd_lattice16_16[]={
/*-- 文字1: 簡 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x08,0xC7,0x12,0x26,0x8A,0x82,0xAA,0xA4,0xA3,
0xA2,0x26,0x2A,0xE2,0x02,0x00,0x00,0x00,0xFF,0x00,0x00,
0x1F,0x12,0x12,0x12,0x12,0x1F,0x40,0x80,0x7F,0x00,0x00
//其余字庫略
};
void main()
{
displaycls (1); //清屏
displayword(2,16*0,1); //簡易信號發生器
displayword(2,16*1,2);
displayword(2,16*2,3);
displayword(2,16*3,4);
displayword(2,16*4,5);
displayword(2,16*5,6);
displayword(2,16*6,7);
displayword(4,16*1,8); //我最愛畢業設計
displayword(4,16*2,9);
displayword(4,16*3,10);
displayword(4,16*4,11);
displayword(4,16*5,12);
displayword(4,16*6,13);
displayword(4,16*7,14);
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -