本帖最后由 ae43 于 2022-1-27 12:07 編輯
#include<reg51.h>
#include"AMPIRE128X64.h"
void LCDCheckBusy(){ //查忙
LCDPORT=0xFF;
LCD12864RW=1;
LCD12864RS=0;
LCD12864EN=1;
LCD12864EN=0;
return BUSYSTATUS;
}
void LCDWriteData(unsigned char Data) //寫數據
{
//while( LCDCheckBusy() );
LCDPORT=0xFF;
LCD12864RW=0;
LCD12864RS=1;
LCDPORT=Data;
LCD12864EN=1;
LCD12864EN=0;
}
void LCDWriteCMD(unsigned char CMD)//寫指令
{
//while(LCDCheckBusy());
LCDPORT=0xFF;
LCD12864RW=0;
LCD12864RS=0;
LCDPORT=CMD;
LCD12864EN=1;
LCD12864EN=0;
}
//LCD開顯示
void LCDTurnOn()
{
LCDWriteCMD(0x3f);
}
//LCD頁地址設置
bit LCDSetPage(unsigned char nPage)
{
bit stat=0;
if(nPage<8)
LCDWriteCMD(0xb8+nPage);
else stat=1;
return stat;
}
//LCD關顯示
void LCDTurnOff()
{
LCDWriteCMD(0x3e);
}
//LCD列地址設置
bit LCDSetColumn(unsigned char nColumn)
{
bit stat=0;
if(nColumn<64)
LCDWriteCMD(0x40+nColumn);
else stat=1;
return stat;
}
//LCD初始化
void LCD12864Init()
{
LCD12864CS1 = 0;
LCD12864CS2 = 0;
LCDTurnOn();
//LCD開顯示
ClearScreen(0);
LCDSetPage(0);
//LCD頁初始地址,共8頁
LCDSetColumn(0);
//LCD列初始地址,共64列
}
/*選擇屏幕screen: 0-全屏,1-左屏,2-右屏*/
void SelectScreen(uchar screen)
{
switch(screen)
{ case 0: LCD12864CS1=0;//全屏
_nop_(); _nop_(); _nop_();
LCD12864CS2=0;
_nop_(); _nop_(); _nop_();
break;
case 1: LCD12864CS1=0;//左屏
_nop_(); _nop_(); _nop_();
LCD12864CS2=1;
_nop_(); _nop_(); _nop_();
break;
case 2: LCD12864CS1=1;//右屏
_nop_(); _nop_(); _nop_();
LCD12864CS2=0;
_nop_(); _nop_(); _nop_();
break;
}
}
/*清屏screen: 0-全屏,1-左屏,2-右*/
void ClearScreen(uchar screen)
{
uchar i,j;
SelectScreen(screen);
for(i=0;i<8;i++) //控制頁數0-7,共8頁
{
LCDSetPage(i);
LCDSetColumn(0);
for(j=0;j<64;j++) //控制列數0-63,共64列
{LCDWriteData(0x00); //寫點內容,列地址自動加1
}
}
}
/*延時程序*/
void delay(uchar z)
{
uchar i,j;
for(i=0; i<z; i++)
for(j = 0; j < 110; j++);
}
#include<reg51.h>
#include"AMPIRE128X64.h"
//---聲明一個全局變量---//
void Delay10ms(unsigned int c);
#define unchar unsigned char
uchar code HZ[]=
{
/*-- 文字: 溫 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
/*-- 文字: 度 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,
/*-- 文字: 1 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 溫 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
/*-- 文字: 度 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,
/*-- 文字: 2 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 溫 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
/*-- 文字: 度 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,
/*-- 文字: 3 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/*顯示全角漢字*/
void Display(uchar ss,uchar page,uchar column,uchar number)
{
int i; //選屏參數,pagr選頁參數,column選列參數,number選第幾漢字輸出
SelectScreen(ss);
column=column&0x3f;
LCDSetPage(page); //寫上半頁
LCDSetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的數據輸出
{
LCDWriteData(HZ[i+32*number]); //i+32*number漢字的前16個數據輸出
}
LCDSetPage(page+1); //寫下半頁
LCDSetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的數據輸出
{
LCDWriteData(HZ[i+32*number+16]); //i+32*number+16漢字的后16個數據輸出
}
}
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
uchar i;
LCD12864RST=1;
LCD12864Init();
ClearScreen(0);//清屏
LCDSetColumn(0);
LCDSetPage(0);
while(1)
{
/* 可以單個顯示
Display(2,0,0*16,0);//
Display(2,0,1*16,1);//
Display(2,0,2*16,2);//
Display(2,0,3*16,3);//
Display(1,0,4*16,4);//
Display(1,0,5*16,5);//
Display(1,0,6*16,6);//*
/* 可以多個顯示,這里是4個一起顯示*/
/*for(i=0;i<4;i++)
{
Display(1,0,i*16,i);/*Display(選屏參數(CS2,CS1),pagr選頁參數,
column選列參數,number選第幾漢字輸出)
_nop_();
Display(2,0,i*16,i+4);
_nop_();
Display(1,0+2,i*16,i+8);
_nop_();
Display(2,0+2,i*16,i+12);
_nop_();
Display(1,0+2+2,i*16,i+16);
_nop_();
Display(2,0+2+2,i*16,i+20);
}
*/
for(i=0;i<4;i++)
Display(1,0,i*16,i);//溫度1
for(i=0;i<4;i++)
Display(1,0+2,i*16,i+4);//溫度2
for(i=0;i<4;i++)
Display(1,0+2+2,i*16,i+8);//溫度3
/*顯示八個字
for(i=0;i<8;i++)
{
Display(1,0+2+2+2,i*8,i);
_nop_(); ;
Display(2,0+2+2+2,i*8,i+8);
}
*/
}
}
/*******************************************************************************
* 函 數 名 : Delay10ms
* 函數功能 : 延時函數,延時10ms
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Delay10ms(unsigned int c) //誤差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
//兩個文件以#include為分界
|