51单片机实现简易数字电压表(液晶显示)仿真图+程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void delay(uint x)
{uint i,j;
for(i=x;i>0;i--)
for(j=0;j<2;j++);
}
/****************侧忙函数************************/
unsigned lcd_bz()
{
unsigned result;
LCD_RS = 0;
void gotoxy(uchar x,uchar y) // x表示行,y表示列
{uchar address;
if(x==1)
address=0x80+y;
else
address=0xc0+y;
LCD_w_com(address);
}
//=========显示一个字符串==================
{
i=ADC_change();
sepr(i);
disp();
}
}
void clock(void) interrupt 1
{
CLK=~CLK;
}
/***********************0809模数转换(ADC0809.c)***************************/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ADC_DB P1
sbit ST= P0^2;
sbit EOC= P0^3;
sbit OE= P0^4;
sbit CLK= P0^1;
uchar c[6];
void sepr(uchar i);
{LCD_w_com(0x38);//设置8位格式,2行,5*7
LCD_w_com(0x0c);//整体显示,关光标,不闪烁
LCD_w_com(0x06);//设定输入方式,增量不移位
LCD_w_com(0x01);//清屏显示
delay(200);
}
//==========光标定位=======================
void LCD_w_com(uchar com)
{
while(lcd_bz());
LCD_DB=com;
LCD_RS=0;//指令
LCD_RW=0;//写入
LCD_E=1;
LCD_E=0;
delay(1);//等待执行完毕。。。
}
//===================写数据函数=================
void disp();
voidADC_init();
ucharADC_change();
ucharADC_change()
{
ST=0;
ST=1;
ST=0;
while(EOC==0);
ADC_DB=0xff;
OE=1;
return(ADC_DB);
}
void disp()
{
gotoxy(1,1);
LCD_display("The Output is:");
void LCD_w_data(uchar dat)
{LCD_DB=dat;
LCD_RS=1;//数据寄存器
LCD_RW=0;//写入数据
LCD_E=1;wenku.baidu.com
LCD_E=0;
delay(1);//等待程序执行完毕。。。
}
//===========初始化函数=============
void LCD_init(void)
gotoxy(2,5);
LCD_display(c);
}
void sepr(uchar i)
{
uint ch;
ch=i;
c[0]='0'+ch/51;
c[1]='.';
c[2]='0'+(ch%51)*10/51;
c[3]='0'+((ch%51)*10%51)*10/51;
c[4]='V';
c[5]='\0';
#define uchar unsigned char
#define uint unsigned int
#define LCD_DB P2//定义LCD的数据端口
sbit LCD_RS=P0^5;
sbit LCD_RW=P0^6;
sbit LCD_E =P0^7;
//===========延时子函数========================
LCD_RW = 1;
LCD_E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (unsigned)(LCD_DB & 0x80);//检测P2最高位是否为1
LCD_E = 0;
return result;//返回侧忙结果
}
//==================写指令函数=================
#include <reg51.h>
#include <lcd.c>
#include <ADC0809.c>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uchar i;
ADC_init();
LCD_init();
while(1)
}
voidADC_init()
{
TMOD=0x02;
TH0=10;
TL0=10;
EA=1;
ET0=1;
TR0=1;
}
/***********************************液晶(lcd.c)****************************/
#include<reg51.h>
#include <INTRINS.H>//库函数头文件,代码中引用了_nop_()函数
液晶显示,89C51实现简易电压表
用keil C51软件编译,主函数中包含了两个c文件,即lcd.c、ADC0809.c
0809的仿真芯片用的是ADC0808进行代替。注意高低位的接法
程序如下:
/**************************************主函数*******************************/
void LCD_display(uchar *dat)
{
while(*dat!='\0')
{LCD_w_data(*dat);
dat++;
}
}
{uint i,j;
for(i=x;i>0;i--)
for(j=0;j<2;j++);
}
/****************侧忙函数************************/
unsigned lcd_bz()
{
unsigned result;
LCD_RS = 0;
void gotoxy(uchar x,uchar y) // x表示行,y表示列
{uchar address;
if(x==1)
address=0x80+y;
else
address=0xc0+y;
LCD_w_com(address);
}
//=========显示一个字符串==================
{
i=ADC_change();
sepr(i);
disp();
}
}
void clock(void) interrupt 1
{
CLK=~CLK;
}
/***********************0809模数转换(ADC0809.c)***************************/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ADC_DB P1
sbit ST= P0^2;
sbit EOC= P0^3;
sbit OE= P0^4;
sbit CLK= P0^1;
uchar c[6];
void sepr(uchar i);
{LCD_w_com(0x38);//设置8位格式,2行,5*7
LCD_w_com(0x0c);//整体显示,关光标,不闪烁
LCD_w_com(0x06);//设定输入方式,增量不移位
LCD_w_com(0x01);//清屏显示
delay(200);
}
//==========光标定位=======================
void LCD_w_com(uchar com)
{
while(lcd_bz());
LCD_DB=com;
LCD_RS=0;//指令
LCD_RW=0;//写入
LCD_E=1;
LCD_E=0;
delay(1);//等待执行完毕。。。
}
//===================写数据函数=================
void disp();
voidADC_init();
ucharADC_change();
ucharADC_change()
{
ST=0;
ST=1;
ST=0;
while(EOC==0);
ADC_DB=0xff;
OE=1;
return(ADC_DB);
}
void disp()
{
gotoxy(1,1);
LCD_display("The Output is:");
void LCD_w_data(uchar dat)
{LCD_DB=dat;
LCD_RS=1;//数据寄存器
LCD_RW=0;//写入数据
LCD_E=1;wenku.baidu.com
LCD_E=0;
delay(1);//等待程序执行完毕。。。
}
//===========初始化函数=============
void LCD_init(void)
gotoxy(2,5);
LCD_display(c);
}
void sepr(uchar i)
{
uint ch;
ch=i;
c[0]='0'+ch/51;
c[1]='.';
c[2]='0'+(ch%51)*10/51;
c[3]='0'+((ch%51)*10%51)*10/51;
c[4]='V';
c[5]='\0';
#define uchar unsigned char
#define uint unsigned int
#define LCD_DB P2//定义LCD的数据端口
sbit LCD_RS=P0^5;
sbit LCD_RW=P0^6;
sbit LCD_E =P0^7;
//===========延时子函数========================
LCD_RW = 1;
LCD_E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (unsigned)(LCD_DB & 0x80);//检测P2最高位是否为1
LCD_E = 0;
return result;//返回侧忙结果
}
//==================写指令函数=================
#include <reg51.h>
#include <lcd.c>
#include <ADC0809.c>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uchar i;
ADC_init();
LCD_init();
while(1)
}
voidADC_init()
{
TMOD=0x02;
TH0=10;
TL0=10;
EA=1;
ET0=1;
TR0=1;
}
/***********************************液晶(lcd.c)****************************/
#include<reg51.h>
#include <INTRINS.H>//库函数头文件,代码中引用了_nop_()函数
液晶显示,89C51实现简易电压表
用keil C51软件编译,主函数中包含了两个c文件,即lcd.c、ADC0809.c
0809的仿真芯片用的是ADC0808进行代替。注意高低位的接法
程序如下:
/**************************************主函数*******************************/
void LCD_display(uchar *dat)
{
while(*dat!='\0')
{LCD_w_data(*dat);
dat++;
}
}