📄 ad0809.c
字号:
#include <reg51.h> /*头文件*/
sbit LCD_RS= P2^0; /*定义引脚*/
sbit LCD_RW= P2^1;
sbit LCD_E= P2^2;
sbit Busy=P3^7;
sbit AD_EOC= P2^4;
sbit AD_ALE_START= P2^5;
int c1;
int ss;
char k0,k1,k2;
char LCD_MB(char t);
void QUWEI(int xx);
void WR_COMM();
void DISPLY();
void CHECK_BF();
void PLAY_LCD(); /*函数声明*/
#define Data P3 //P3 数据IO
#define ru P1 //P1 数据IO
main()
{ ru=0xff; /*P1口设为输入*/
for(c1=0;c1<2000;c1++);
loop:
AD_ALE_START=0;
AD_ALE_START=1;
AD_ALE_START=0; /*开始采样*/
for(c1=0;c1<2000;c1++); /*延时,等待AD转换完成*/
if(AD_EOC==0) goto loop;
ss=ru; /*读入AD转换完成的数据*/
QUWEI(ss); /*取出个位,十位,百位数字*/
k0=LCD_MB(k0); /*百位数字的LCD码表值*/
k1=LCD_MB(k1); /*十位数字的LCD码表值*/
k2=LCD_MB(k2); /*个位数字的LCD码表值*/
PLAY_LCD(); /*LCD初始化子程序*/
Data=k0; /* 将需要显示的数据送入LCD */
DISPLY(); /*调用显示执行子程序*/
Data=k1;
DISPLY();
Data=k2;
DISPLY();
for(c1=0;c1<5000;c1++); /*延时*/
for(c1=0;c1<5000;c1++); /*延时*/
}
void QUWEI(int xx) /*取出个位,十位,百位数字子程序*/
{
k0=xx/100; /*取出百分位数字*/
k1=xx%100/10; /*取出十分位数字*/
k2=xx%10; /*取出个位数字*/
}
char LCD_MB(char t) /*各个数字所对应的LCD码表子程序 */
{ switch(t)
{ case 0: t=0x30; /*数字 0 所对应的LCD码表值 0x30 */
break;
case 1: t=0x31; /*数字 1 所对应的LCD码表值 0x31 */
break;
case 2: t=0x32; /*数字 2 所对应的LCD码表值 0x32 */
break;
case 3: t=0x33; /*数字 3 所对应的LCD码表值 0x33 */
break;
case 4: t=0x34; /*数字 4 所对应的LCD码表值 0x34 */
break;
case 5: t=0x35; /*数字 5 所对应的LCD码表值 0x35 */
break;
case 6: t=0x36; /*数字 6 所对应的LCD码表值 0x36 */
break;
case 7: t=0x37; /*数字 7 所对应的LCD码表值 0x37 */
break;
case 8: t=0x38; /*数字 8 所对应的LCD码表值 0x38 */
break;
case 9: t=0x39; /*数字 9 所对应的LCD码表值 0x39 */
break;
default: break;
}
return(t);
}
/*..................LCD子函数...........................*/
void PLAY_LCD() //LCD初始化子程序
{
Data=0x01; //00000001B 清屏并光标复位
WR_COMM(); //调用写入命令子程序
Data=0x30; //00110000B 设置:8位总线、1行、5x7点阵方式
WR_COMM(); //调用写入命令子程序
Data=0x0F; //00001111B 显示器开、光标开、光标允许闪烁
WR_COMM(); //调用写入命令子程序
Data=0x14; //00010100B 文字不动,光标自动右移
WR_COMM(); //调用写入命令子程序
Data=0x00; //H 写入显示起始地址(第1行第1个位置)
WR_COMM(); //调用写入命令子程序
}
void WR_COMM() /*写入命令子程序*/
{ LCD_RS=0; //写入控制命令的子程序
LCD_RW=0;
LCD_E=0;
CHECK_BF(); /*判断LCD是否忙碌*/
LCD_E=1;
}
void CHECK_BF() /*判断LCD是否忙碌子程序*/
{ loop:
Data=0xff; //判断液晶显示器是否忙的子程序
LCD_RS=0;
LCD_RW=1;
LCD_E=0;
LCD_E=0; //相当于NOP
LCD_E=1;
if(Busy==1) goto loop; //如果P1.7为高电平表示忙就循环等待
}
void DISPLY() //显示执行子程序
{
LCD_RS=1; //RS=1
LCD_RW=0; //RW=0 准备写入数据
LCD_E=0; //E=0 执行显示命令
CHECK_BF(); //判断液晶模块是否忙?
LCD_E=1; //E=1 ;显示完成,程序停车
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -