📄 lcd12864.c
字号:
/*****************************************************************/
/* */
/*名称: AD转换+LCD12864显示程序 */
/*功能: 1 AD转换,二进制转换成十进制 */
/* 2 显示英文,数字,符号,图片。 */
/*难度等级: 高 */
/* 作者: zengrenliang */
/* 版权: http://www.51kaifa.com */
/*编写日期: 2006.05.20 */
/*****************************************************************/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
/**********引脚定义*********/
sbit lck = P3^5;//锁存信号
sbit addr0 = P1^4;
sbit addr1 = P1^5;
sbit addr2 = P1^6;
sbit cs138 = P1^7;
/********常用命令及参数定义********/
#define DISPON 0x3f
#define DISPOFF 0x3e
#define DISPFIRST 0xc0
#define SETX 0x40
#define SETY 0xb8
#define LCDBUZY 0x80
#define L 0x00
#define R 0x40
#define LIMIT 0x80
/**********全局变量************/
uchar cbyte;
uchar data statu;
bit xy;
/**************函数******************/
void WrL(uchar x);
void WrR(uchar x);
void Lcmcls(void);
void Lcminit (void);
void Putpicture();
void delay(unsigned int time);
void VtoH8x16change(uchar *hzbuf);
void Puthalf(uchar *strch,uchar row,uchar col);
void Wrdata(uchar x,uchar row,uchar col);
void Locatexy(uchar row,uchar col);
void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
uchar ADC0804();
extern uchar code char_Table[95][16];
extern unsigned char code picture[];
/***************微秒级延时*****************/
void delay(unsigned int time)
{ unsigned int i;
for(i=0;i<time;i++);
}
/***********主程序***************/
void main(void)
{ uchar i,j,k;
float voltage,decimal;
unsigned int intvolt,tofloat;
addr0 = 1;
addr1 = 0;
addr2 = 1;//ULN2003片选地址
P0 = 0x00;//断开继电器A,B
cs138 = 1;
cs138 = 0;//数据锁存到U18(74HC574)
Lcminit();//LCD初始化
Putpicture();//显示界面图片
while(1)
{
voltage = ADC0804();
voltage = voltage * 0.0391;//将二进制字节数据变成实际电压值 10/256 = 0.0196
intvolt = voltage;//取整数部分
tofloat = intvolt;
decimal = voltage - tofloat;//取小数部分
decimal = decimal * 100;//小数部分取两位
i = intvolt % 0x0a + '0';//整数部分个位
intvolt = decimal;
j = intvolt % 0x0a + '0';//小数部分低位
intvolt = intvolt / 0x0a;
k = intvolt % 0x0a + '0';//小数部分高位
vWrite8x16Character(&char_Table['V'-0x20][0],3,112,0);//显示电压单位
vWrite8x16Character(&char_Table[j-0x20][0],3,104,0);//显示小数低位
vWrite8x16Character(&char_Table[k-0x20][0],3,96,0); //显示小数高位
vWrite8x16Character(&char_Table['.'-0x20][0],3,88,0); //显示小数点
vWrite8x16Character(&char_Table[i-0x20][0],3,80,0);//显示整数位
delay(5000);
}
}
/*******************0804转换程序********************/
uchar ADC0804()
{ uchar adc0804value;
addr0 = 1;
addr1 = 1;
addr2 = 0;//输出AD0804片选地址。
cs138 = 1;
P0 = 0xff;//向ADC0804发任何数据,0804开始转换
WR = 0;
WR = 1;
delay(1000);//等待转换完成
RD = 0;
adc0804value=P0;//读取转换后的值
RD = 1;
cs138 = 0;
return(adc0804value);
}
//***********初始化LCD*******************/
void Lcminit (void)
{
cbyte=DISPOFF;
WrL(cbyte);
WrR(cbyte);
cbyte=DISPON;
WrL(cbyte);
WrR(cbyte);
cbyte=DISPFIRST;
WrL(cbyte);
WrR(cbyte);
Lcmcls();
Locatexy(0,0);
}
/***************LCD清屏********************/
void Lcmcls(void)
{ uchar i,j;
for(i=0;i<8;i++){
delay(6);
for(j=0;j<LIMIT;j++){
delay(6);
Wrdata(0x0,i,j);
}
}
}
/**************写左区***************/
void WrL(uchar x)
{
P0=0xFF;//P0口送FF,准备读
lck = 0;
P1 = 0x2a;//ELCD=1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -