- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51单片机实现简易数字电压表(液晶显示)仿真图程序
液晶显示,89C51实现简易电压表
用keil C51软件编译,主函数中包含了两个c文件,即lcd.c 、 ADC0809.c
0809的仿真芯片用的是ADC0808进行代替。注意高低位的接法
程序如下:
/**************************************主函数*******************************/
#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)
{
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);
void disp();
void ADC_init();
uchar ADC_change();
uchar ADC_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:);
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;
}
void ADC_init()
{
TMOD=0x02;
TH0=10;
TL0=10;
EA=1;
ET0=1;
TR0=1;
}
/***********************************液晶(lcd.c)****************************/
#includereg51.h
#include INTRINS.H //库函数头文件,代码中引用了_nop_()函数
#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;
//===========延时子函数========================
void delay(uint x)
{uint i,j;
for(i=x;i0;i--)
for(j=0;j2;j++);
}
/****************侧忙函数************************/
unsigned lcd_bz()
{
unsigned result;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (unsigned)(LCD_DB 0x80); //检测P2最高位是否为1
LCD_E = 0;
return result;//返回侧忙结果
}
//==================写指令函数=================
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);//等待执行完毕 。。。
文档评论(0)