📄 cehngxu.c
字号:
#include<reg52.h>
#include<intrins.h>
sbit rd=P3^7;
sbit wr=P3^6; //adc0804
sbit cs=P3^0;
sbit en=P3^2; //液晶
sbit lcdrs=P3^3;
sbit ledh=P2^4; //二极管
sbit ledl=P2^5;
sbit keyv1=P2^3; //按键
sbit key0=P2^0;
sbit keyv2=P2^2;
sbit keyv3=P2^1;
#define uchar unsigned char
#define uint unsigned long int
uchar a1,b1,c1,d1,a2,b2,c2,d2,a0,b0,c0,d0,e0,a3,b3,c3,d3,e3,num;
uint shu,R,k,m;
uint adread();
void adstart();
uchar code table1[]="Voltmeter";
uchar code table2[]="00000V/K ";
void delay(uint z);
void init() ;
void write_com(uchar com);
void write_data(uchar date);
void display();
void displayV5(uchar zhengs, uchar shifw, uchar baifw,uchar qianfw);
void displayV15(uchar zhengs1,uchar zhengs2, uchar shifw, uchar baifw,uchar qianfw);
void displayO(uchar wan, uchar qian, uchar bai,uchar shi,uchar ge);
void main()
{
init();
display();
while(1)
{
adstart();
shu=adread();
k=adread();
m=adread();
delay(1);
if(shu<254)
{
ledl=0; //绿灯亮,表示ad已读数据
}
R=1000*(shu*0.0196)/(5-shu*0.0196);
a0=R/10000;
b0=R%10000/1000;
c0=R%1000/100; //dianzu xianshi
d0=R%100/10;
e0=R%10;
shu=shu*196;
a1=shu/10000;
b1=shu%10000/1000;
c1=shu%1000/100; //电压显现 0-5
d1=shu%100/10;
delay(1);
k=k*196;
k=k*2;
a2=k/10000;
b2=k%10000/1000;
c2=k%1000/100; //电压显现 0-10
d2=k%100/10;
delay(1);
m=m*196;
m=m*3;
a3=m/100000;
b3=m%100000/10000;
c3=m%10000/1000; //电压显现 0-15
d3=m%1000/100;
e3=m%100/10;
delay(1);
if(keyv1==0)
{
delay(10);
if(keyv1==0)
{
displayV5(a1,b1,c1,d1); //按键按下测0到5伏
while(!keyv1);
}
}
if(keyv2==0)
{
delay(10);
if(keyv2==0) // 按键按下测0到10伏
{
displayV5(a2,b2,c2,d2);
while(!keyv2);
}
}
if(keyv3==0)
{
delay(10);
if(keyv3==0) // 按键按下测0到15伏
{
displayV15(a3,b3,c3,d3,e3);
while(!keyv3);
}
}
if(key0==0)
{
delay(10);
if(key0==0)
{ // 按键按下测电阻
displayO(a0,b0,c0,d0,e0);
while(!key0);
}
}
}
}
//**************************************************************************
//******************** adc0804 *********************************
// *************************************************************************
void adstart()
{
P1=0XFF;
wr=1;
_nop_(); //启动ad转换
wr=0;
_nop_();
wr=1;
_nop_();
}
uint adread() //ad read
{
uint temp;
rd=1;
_nop_();
rd=0;
_nop_();
rd=1;
temp=P1;
return(temp);
}
//**************************************************************************
//***********************液晶1602*******************************************
//***************************************************************************
void write_com(uchar com) //液晶写命令
{
lcdrs=0; //command
P0=com;
delay(1);
en=1;
delay(5);
en=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
en=1; //液晶写数据
delay(5);
en=0;
}
//***********************************************************
void init() //初始化
{
en=0; //液晶使能端
P2=0XFF;
cs=0; //ad cs端至低
write_com(0x38);
write_com(0x0c); //设计开显示,不显示光标
write_com(0x06); //写一个字符后地址指针加一
write_com(0x01);//显示清零
}
//**************************************************************
void delay(uint z) //延时子函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//*****************************************************************
//*********************显示函数************************************
void displayV5(uchar zhengs, uchar shifw, uchar baifw,uchar qianfw)
{
write_com(0x80+0x44);
write_data(0x30+zhengs);//0x30代表数字0
write_com(0x80+0x45);
write_data('.');
write_com(0x80+0x46);
write_data(0x30+shifw);
write_com(0x80+0x47);
write_data(0x30+baifw);
write_com(0x80+0x48);
write_data(0x30+qianfw);
write_com(0x80+0x49);
write_data(0x30);
write_com(0x80+0x4a);
write_data('V');
write_com(0x80+0x4b);
write_data(' ');
}
void displayO(uchar wan, uchar qian, uchar bai,uchar shi,uchar ge)
{
write_com(0x80+0x44);
write_data(0x30+wan);//0x30代表数字0
write_com(0x80+0x45);
write_data(0x30+qian);
write_com(0x80+0x46);
write_data('.');
write_com(0x80+0x47);
write_data(0x30+bai);
write_com(0x80+0x48);
write_data(0x30+shi);
write_com(0x80+0x49);
write_data(0x30+ge);
write_com(0x80+0x4A);
write_data(0x30);
write_com(0x80+0x4b);
write_data('k');
}
void displayV15(uchar zhengs1,uchar zhengs2, uchar shifw, uchar baifw,uchar qianfw)
{
write_com(0x80+0x44);
write_data(0x30+zhengs1);//0x30代表数字0
write_com(0x80+0x45);
write_data(0x30+zhengs2);
write_com(0x80+0x46);
write_data('.');
write_com(0x80+0x47);
write_data(0x30+shifw);
write_com(0x80+0x48);
write_data(0x30+baifw);
write_com(0x80+0x49);
write_data(0x30+qianfw);
write_com(0x80+0x4a);
write_data(0x30);
write_com(0x80+0x4b);
write_data('V');
// write_com(0x80+0x4b);
// write_data(' ');
}
void display()
{
write_com(0x80+0X03);
for(num=0;num<8;num++)
{
write_data(table1[num]);
delay(5);
}
write_com(0x80+0x44);
for(num=0;num<10;num++)
{
write_data(table2[num]);
delay(5);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -