📄 ad.c
字号:
/************************************/
/*12c5a60s2有内置的ad,使用时,请添加上<STC_NEW_8051.H>的.h文件才可以使用*/
/*转换的结果显示在1602的液晶上*/
#include<STC_NEW_8051.H>
#include<intrins.h> //包含_nop_()函数定义的头文件
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define AD_SPEED 0x60
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit rw=P3^6;
uchar num,shi,ge,bai,qian1,qian2,zuoj,youj,hou;
uchar code table[]="000";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void display(uchar a,uchar add)
{
ge=a%10;
shi=a%100/10;
bai=a/100;
write_com(0x80+add);
write_data(0x30+bai);
write_data(0x30+shi);
write_data(0x30+ge);
}
void init()
{
rw=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<3;num++)
{
write_data(table[num]);
delay(2);
}
/* TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1; */
}
//ad转换
uint moni(uint channel)
{
uchar AD_finished=0;
P1ASF=channel;
AUXR1&=~0x04;
ADC_CONTR|=0x80; //开A/D转换电源,第一次使用时要打开内部模拟电源
ADC_RES=0;
ADC_RESL=0;
channel&=0x07;
//选择P1.x作为A/D转换通道
ADC_CONTR=AD_SPEED;
_nop_();
ADC_CONTR|=channel;
_nop_();
ADC_CONTR|=0x80;
delay(60);
ADC_CONTR|=0x08;
AD_finished=0;
while(AD_finished==0) //等待A/D转换结束
{
AD_finished=(ADC_CONTR&0x10);
}
ADC_CONTR&=0xE7; //将ADC_FLAG清0
//保存A/D转换结果
return(ADC_RES);
}
void main()
{
init();
while(1)
{
qian1=moni(0x00); //P0^0
display(qian1,0);
qian2=moni(0x01);//P0^1
display(qian2,0x04);
zuoj=moni(0x02);//P0^2
display(zuoj,0x40);
youj=moni(0x03);//P0^3
display(youj,0x44);
hou=moni(0x04);//P0^4
display(hou,0x48);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -