📄 mcg-12864.txt
字号:
//显示汉字,字符串,变量值
/**********************************
CPU:stc89c52,液晶msc-g12864dyrn-2n,信利的MCG12864A2-3
**********************************/
#include "reg52.h"
#include "ziku.h"
#include <stdlib.h>
uint8 m[6];
char *str1,*str2;
uint8 xp;
void Delay(uint16 count)
{
uint8 i;
while(--count != 0)
{
for(i = 0; i < 125; i++); // ";" 表示空语句,CPU空转。
} // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
}
/*****************************************
液晶部分
******************************************/
void Busy(void)
{
RW = 1; RS = 0;
E = 1;
while(DATAPORT&BUSY);
}
void WriteCMD(uint8 command)
{
RW = 0; RS = 0;
DATAPORT= command;
E = 1;
E = 0;
Busy();
}
void WriteData(uint8 Data)
{
RW = 0; RS = 1;
DATAPORT = Data;
E = 1;
E = 0;
Busy();
}
void Fill_Screen(uint8 FillData) //填充数据
{
uint8 x,y;
CS1 = 1;CS2 = 1; // 选中左半屏及右半屏
WriteCMD(START_ROW+0); // 设置显示起始行为0
for(x=0;x<8;x++)
{
WriteCMD(PAGE_START_ADDR+x); // 设置页地址
WriteCMD(COL_START_ADDR);// 设置列地址
for(y=0;y<64;y++)WriteData(FillData);
}
CS2 = 0; // 不选中右半屏
}
void Clear_Screen(void) //清屏
{
Fill_Screen(0x00);
}
uint8 GetIndex(unsigned char szText)
{
uint8 code TAB[]={' ','0','1','2','3','4','5','6','7','8','9','-','.',':'};
uint8 i;
for(i=0;i<14;i++)if(szText==TAB[i]) return i;
return 0x00;
}
void selpage(uint8 bitt) //换页
{
if(bitt<64)
{CS1 =1; CS2 =0;xp=bitt;}
else
{CS1 =0;
CS2 =1;
xp=bitt-64;
}//页面换转?
}
//页地址(0~7) 列地址(0~128) 16*16点阵汉字字模(纵向取模,字节倒序)
void ShowHZ(uint8 page,uint8 col, uint8 code *show)
{
uint8 j=0,i=0;
selpage(col);
for(j=0;j<2;j++)
{
WriteCMD(PAGE_START_ADDR+page+j);
WriteCMD(COL_START_ADDR+xp);
for(i=0;i<16;i++) WriteData(show[16*j+i]);
}
}
//页地址(0~7) 列地址(0~128)
//8*16点阵字符或数字字模(纵向取模,字节倒序)
void ShowChar(uint8 page,uint8 col, uint8 code Char)
{
uint8 j=0,i=0;
for(j=0;j<2;j++)
{
WriteCMD(PAGE_START_ADDR+page+j);
WriteCMD(COL_START_ADDR+col);
for(i=0;i<8;i++)WriteData(CharText[GetIndex(Char)][8*j+i]);
}
}
//显示字符串
void shou(uint8 page,uint8 col, uint8 *s)
{uint8 da;
while(*s)
{da=*s++;
selpage(col);
ShowChar(page,xp,da);
col+=8;
}
}
void Init(void)
{
CS1 = 1; CS2 = 1;
WriteCMD(DISP_OFF);
WriteCMD(PAGE_START_ADDR+0);
WriteCMD(START_ROW+0);
WriteCMD(COL_START_ADDR+0);
WriteCMD(DISP_ON);
}
/****************************************
温度部分
*****************************************/
void change(fp32 dataa)
{ uint8 j=0;
fp32 ndata;
ndata=dataa;
if(dataa<0)dataa=-dataa;
m[0]=dataa/100; //bai
m[1]=(dataa-m[0]*100)/10;//shi
m[2]=(dataa-m[0]*100-m[1]*10); //ge
if(m[0]==0)
{m[0]=' ';
j=1;
}
else m[0]+=0x30;
if(m[1]==0)
{if(j==1)m[1]=' ';}
else m[1]+=0x30;
m[2]+=0x30;
m[3]='.';
if((0>ndata)&(ndata>(-10)))m[1]='-';
if(ndata<=(-10))m[0]='-';
m[4]=(int)(dataa*10)%10+0x30;//xiaoshu
m[5]='\0';
j=0;
}
void main (void)
{ fp32 biao=0.0;
fp32 bian=0.0;
Init(); // LCM12864初始化
Clear_Screen();
while(1)
{
if(biao==1)
{ ShowHZ(1,32,huan);
ShowHZ(1,48,ying);
ShowHZ(1,64,shi);
ShowHZ(1,80,yong);
shou(6,0," 1235-5678");
}
else
{change(bian);
str1=m;
ShowHZ(0,48,wen);
ShowHZ(0,64,du);
shou(6,64,"16:58:02");
bian+=0.1;
}
Delay(3500);
biao^=1;
if(bian>26)bian=24.9;
Clear_Screen();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -