27,373
社区成员
发帖
与我相关
我的任务
分享
#include <reg52.h>
#include <intrins.h>
#define _Nop() _nop_();//空操作
sbit ST = P3^0;
sbit OE = P3^1;
sbit EOC = P3^2;
sbit BEEP = P3^3;
sbit V1 = P3^4;
sbit V2 = P3^5;
sbit V3 = P3^6;
sbit V4 = P3^7;
unsigned int h;
unsigned char digit[5];
unsigned char table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//不带小数点编码
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点编码
void delay(unsigned int tc){
while (tc != 0){
unsigned int i;
for(i = 0; i < 100;i ++)
tc--;
}
}
unsigned char adc0809(){
unsigned char adda;
ST = 0;
OE = 0;
P1 = 0xff;
ST = 1;
_nop_();_nop_();
ST = 0;
_nop_();_nop_();_nop_();_nop_();
while(EOC == 0);
OE = 1;
adda = P1;
_nop_();
OE = 0;
return(adda);
}
unsigned int dacl(){
int x;
unsigned int dady = 0;
for(x = 0;x < 10;x++)
dady = adc0809() + dady;
dady = dady / 10;
return(dady);
}
void loop(void){
while(h == 1){
BEEP = !BEEP;
delay(100);
BEEP = !BEEP;
}
}
void led_display(float val){
if(V1 == 0){
val = val * 500 /255;
if(val > 200){
//P0.7 = 1;
h = 1;
loop();
}
else if(val < 200 && val >20){
digit[3] = 1;
digit[2] = val / 100;
val = val - 100 * digit[4];
digit[1] = val / 10;
val = val - 10 * digit[3];
digit[0] = val * 10 / 10;
digit[3] = table[digit[3]];
digit[2] = table[digit[2]];
digit[1] = table[digit[1]];
digit[0] = table[table[0]];
}
}
else if(V2 == 0){
val = val * 10 / 255;
if(val > 20 || val < 2 ){
h = 1;
loop();
}
else {
digit[3] = 1;
digit[2] = val / 10;
val = val - 10 * digit[2];
digit[1] = val * 10 / 10;
val = val - digit[1];
digit[0] = val * 10 / 10;
digit[3] = table[digit[3]];
digit[2] = table[digit[2]];
digit[1] = table[digit[1]];
digit[0] = table[digit[0]];
}
}
else if(V3 == 0){
val =10 * 5 * val / 255 ;
if(val > 20 || val < 2){
h = 1;
loop();
}
else {
digit[3] = 1;
digit[2] = val / 10;
val = val - 10 * digit[2];
digit[1] = val * 10 / 10;
val = val - digit[1];
digit[0] = val * 10 / 10;
digit[3] = table[digit[3]];
digit[2] = table[digit[2]];
digit[1] = table[digit[1]];
digit[0] = table[digit[0]];
}
}
else if(V4 == 0){
val = 500 * val / 255;
if(val > 200){
h = 1;
loop();
}
else {
digit[3] = 1;
digit[2] = val / 100;
val = val - 100 * digit[4];
digit[1] = val / 10;
val = val - 10 * digit[3];
digit[0] = val * 10 / 10;
digit[3] = table[digit[3]];
digit[2] = table[digit[2]];
digit[1] = table[digit[1]];
digit[0] = table[table[0]];
}
}
}
void main(){
int i;
int j = 3;
int k;
unsigned char fuhao[4];
BEEP = 0;
led_display(dacl());
for(i = 3;i >= 0;i--){
if(digit[i] != 0xc0){
fuhao[j--] = digit[i];
}
for(k = 0;k < 4;k++){
P0 = 0x01 << k;
P2 = fuhao[k];
delay(5);
}
}
}