电压表主程序模块_电路实物图电压表
电压表主程序模块由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“电路实物图电压表”。
/**电压表主程序模块*/
#include
#define uchar unsigned char #define uint unsigned int void result(uchar);uchar value=0;#include“adc0809.h” #include“lcd1602.h” uchar str[5];uchar volt[7];
uchar a=0+0x30;uchar str1[11]=“tanxiaopin”;sbit CLK=P0^7;uint n;
void main(){
//uint i;ADC0809_init();lcd_init();while(1){
lcd_zifu(str1,0x01);
value=AD();//原值
str[0]=value/100+0x30;
str[1]=value%100/10+0x30;
str[2]=value%10+0x30;
result(value);
lcd_data(str,0x40);
lcd_data(volt,0x46);
} while(1);}
void result(uchar v)//转换成电压值 { float a;a=(v/255.0)*500.0;volt[0]=((int)a)/100+0x30;volt[1]='.';volt[2]=((int)a)%100/10+0x30;volt[3]=((int)a)%10+0x30;volt[4]=' ';volt[5]='V';} void t1(void)interrupt 3
{
CLK=~CLK;
}
/*ADC0809程序模块*/
#include #define uchar unsigned char #define uint unsigned int
sbit ST=P0^4;sbit EOC=P0^5;sbit OE=P0^6;//sbit CLK=P0^7;sbit ADDA=P0^0;sbit ADDB=P0^1;sbit ADDC=P0^2;
sbit ALE=P0^3;
uchar v;//保存IN0和经AD转换后的数据 /*非精确演示函数*/ void delay(ms){ uint i,j;
for(i=ms;i>0;i--)
for(j=125;j>0;j--);}
void ADC0809_init(){ TMOD=0x20;TH1=(255-250);TL1=(255-250);EA=1;//开总中断
ET1=1;//开定时器1中断
TR1=1;//启动定时器1
ST=0;
OE=0;ALE=0;} /*用中断做一个500K HZ的时钟信号*/
/******AD转换函数*******/ uchar AD(){ uchar temp=0;ST=0;//EOC=1;// ALE=1;ADDA=0;ADDB=0;ADDC=0;
delay(1);// ALE=0;
//OE=0;
ST=0;
ALE=1;
ST=1;
ALE=0;
ST=0;
delay(2);
while(EOC==0);
OE=1;
temp=P2;
delay(2);
OE=0;
return temp;}
/*ADC0809 模块封装头文件*/ void ADC0809_init();uchar AD();
/*LCD1602液晶显示模块*/ #include #include #define uchar unsigned char #define uint unsigned int sbit rs=P1^5;sbit rw=P1^6;sbit en=P1^7;void lcd_1602(uchar comm);void lcd_write(uchar dat);bit lcd_busy();extern void delay(uint);
void lcd_1602(uchar comm);void lcd_write(uchar dat);
bit lcd_busy();sbit busy=P3^7;extern void delay(uint);
/***************************** 1602液晶写命令函数 参数: 返回值:无
******************************/ void lcd_1602(uchar comm){ while(lcd_busy());//查忙
rs = 0;rw = 0;en = 0;
_nop_();P3 = comm;_nop_();en = 1;_nop_();_nop_();en = 0;} /***************************** 1602液晶写数据函数 参数: 返回值:无
******************************/ void lcd_write(uchar dat){ while(lcd_busy());//查忙
rs = 1;
rw = 0;
en = 0;
_nop_();
P3 = dat;
_nop_();
_nop_();
en = 1;
_nop_();
_nop_();
en = 0;}
/***************************** 1602液晶初始化函数 参数:无 返回值:无
******************************/ void lcd_init(){
delay(15);lcd_1602(0x38);delay(3);lcd_1602(0x38);
delay(3);lcd_1602(0x38);delay(3);lcd_1602(0x08);lcd_1602(0x01);delay(3);lcd_1602(0x06);lcd_1602(0x0c);} /***************************** 1602液晶读忙标志 参数:无 返回值:无
******************************/ bit lcd_busy(){
bit result;rs = 0;rw = 1;en = 1;delay(2);result = busy;en = 0;return result;}
/***************************** 1602液晶写字符 参数: 返回值:无
******************************/ void lcd_zifu(uchar *p,uchar wei){ uchar temp;lcd_1602(0x80+wei);/*temp= *p;while(temp!=' '){
lcd_write(temp);
p++;
temp=*p;}*/ for(temp=*p;temp!=' ';p++,temp=*p)
lcd_write(temp);
delay(10);}
void lcd_data(uchar *p,uchar wei){ uchar temp;lcd_1602(0x80+wei);for(temp=*p;temp!=' ';p++,temp=*p)
lcd_write(temp);delay(10);} /*LCD1602液晶模块封装*/ void lcd_init();void lcd_zifu(uchar *p,uchar wei);void lcd_data(uchar *p,uchar wei);