📄 msn.c
字号:
#include<reg52.h>//数码管动态显示电压值0V~1.33V(不知道什么原因,电压再大就又从0开始)
#define uint unsigned int
#define uchar unsigned char
sbit beeper=P2^0;
sbit led=P1^3;
sbit SEGSEL1 = P1^4;
sbit SEGSEL2 = P1^5;
sbit SEGSEL3 = P1^6;
sbit SEGSEL4 = P1^7;
sbit ADCCS = P2^4;
sbit ADCOUT = P2^3;
sbit SCLK = P2^6;
//共阴数码管段码
uchar code dat[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,//0,1,2,3,4,5
0x7d,0x07,0x7f,0x6f,0x77,0x7c,//6,7,8,9,a,b
0x39,0x5e,0x79,0x71 //c,d,e,f
};
//带有小数点的段码
uchar code dat1[]={
0xbf,0x86,0xdb,0xcf,0xe6,0xed,//0,1,2,3,4,5
0xfd,0x87,0xff,0xef,0xf7,0xfc,//6,7,8,9,a,b
0xb9,0xde,0xf9,0xf1 //c,d,e,f
};
void delay(uint);
void delay1();
void init();
void display(uint);
uchar adc();
void main(void)
{
int j,q=0;
float p ,m,n;
int a,b,c,d,e,f ;
init();
while(1)
{
// led=1;
q=adc();
// P0=q;
//电压数据处理
p=(q*1.35)/256;
m=p;n=p ;
a=(int)(p/10);
b=((int)p)%10;
c=((int)(m*10))%10;
d=((int)(n*100))%10;
e=((int)(n*1000))%10;
f=e+10*d+100*c+1000*b;
// 显示数据;
for(j = 0; j < 50; j++)
{
display(f);
}
}
}
void init()
{
P0=0;//对P0口初始化
P1=0;//对P1口初始化,关led灯,关数码管
beeper=0;//关蜂鸣器
}
//延时z ms时间
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<1000;y++);
}
//延时14us时间
void delay1()
{
uint m;
for(m=0;m<4;m++);
}
//四位数码管显示
void display(uint n)
{
uint ge=0,shi=0,bai=0,qian=0;
qian=n/1000;
bai=n%1000/100;
shi=n%100/10;
ge=n%10;
//显示个位数据
SEGSEL1 = 0;
SEGSEL2 = 0;
SEGSEL3 = 0;
SEGSEL4 = 1;
P0=dat[ge];
delay(2);
//显示十位数据
SEGSEL1 = 0;
SEGSEL2 = 0;
SEGSEL4 = 0;
SEGSEL3 = 1;
P0=dat[shi];
delay(2);
//显示百位数据
SEGSEL1 = 0;
SEGSEL3 = 0;
SEGSEL4 = 0;
SEGSEL2 = 1;
P0=dat[bai];
delay(2);
//显示千位数据
SEGSEL2 = 0;
SEGSEL3 = 0;
SEGSEL4 = 0;
SEGSEL1 = 1;
P0=dat1[qian];
delay(2);
}
//AD转换过程
uchar adc(void)
{
uchar rbyte,i;
//置IO口为高,输入状态
ADCOUT = 1;
SCLK = 0;
//启动转换
ADCCS = 0;
delay1();
for(i = 0; i < 8; i++)
{
if(ADCOUT) rbyte += 1;
rbyte <<= 1;
SCLK = 1;
delay1();
SCLK = 0;
}
//开始下次转换
ADCCS = 1;
return(rbyte);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -