#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit clock = P1^3;
sbit d_in = P1^2;
sbit d_out = P1^1;
sbit _cs = P1^0;
sbit wei1 = P1^4; //高位位选,低电平有效
sbit wei2 = P1^5;
sbit wei3 = P1^6;
sbit wei4 = P1^7; //低位位选
sbit ring = P3^2;
//sbit sw1 = P3^2;
//sbit sw2 = P3^3;
//sbit sw3 = P3^4;
uchar a1,b1,c1,d1;
float sum;
float sum_final1;
uint shangxian;
uchar duan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar duan_dot[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
//uchar wei[] = {0x08,0x04,0x02,0x01};
void delay1(unsigned char b)
{
unsigned char a;
for(; b > 0; b--)
for(a = 22; a > 0; a--);
}
//void display1(uchar a, uchar b, uchar c, uchar d)
//{
//
//
// wei4 = 0;
// P2 = duan[d];//|0x80;
// wei4 = 1;
// delay1(1);
// //wei4 = 1;
//
// wei3 = 0;
// //p2 = 0xff;
// P2 = duan[c];
// wei3 = 1;
// delay1(1);
// //wei3 = 1;
//
//
// //p2 = 0xff;
// wei2 = 0;
// //P2 = dan[b]|0x80;
// P2 = duan[b];
// wei2 = 1;
// delay1(1);
// //wei2 = 1;
//
// wei1 = 0;
// //p2 = 0xff;
// P2 = duan_dot[a];///|0x80;
// wei1 = 1;
// delay1(1);
// //wei1 = 1;
//}
void display1(uchar a, uchar b, uchar c, uchar d)
{
P2 = duan[d];
wei4 = 1;
delay1(50);
wei4 = 0;
P2 = duan[c];
wei3 = 1;
delay1(50);
wei3 = 0;
P2 = duan[b];
wei2 = 1;
delay1(50);
wei2 = 0;
P2 = duan_dot[a];
wei1 = 1;
delay1(50);
wei1 = 0;
}
/*void display2(uchar c, uchar d)
{
P0 = 0x40;
wei3 = 1;
delay1(50);
wei3 = 0;
P0 = duan[c];
wei2 = 1;
delay1(50);
wei2 = 0;
P0 = duan[d];
wei1 = 1;
delay1(50);
wei1 = 0;
}
*/
/*void display3(uint gao)
{
uchar x, y;
x = gao / 10;
y = gao % 10;
P0 = duan[x];
wei2 = 1;
delay1(50);
wei2 = 0;
P0 = duan[y];
wei1 = 1;
delay1(50);
wei1 = 0;
}
*/
uint read(uchar port)
{
uchar i, al = 0, ah = 0;
unsigned long ad;
clock = 0;
_cs = 0;
port <<= 4;//什么意思
for(i = 0; i < 4; i++)
{
d_in = port & 0x80;
clock = 1;
clock = 0;
port <<= 1;
}
d_in = 0;
for(i = 0; i < 8; i++)
{
clock = 1;
clock = 0;
}
_cs = 1;
delay1(5);
_cs = 0;
for(i = 0; i < 4; i++)
{
clock = 1;
ah <<= 1;
if(d_out)
ah |= 0x01;
clock = 0;
}
for(i = 0; i < 8; i++)
{
clock = 1;
al <<= 1;
if(d_out)
al |= 0x01;
clock = 0;
}
_cs = 1;
ad = (uint)ah;
ad <<= 8;
ad |= al;
return(ad);
}
/*
void getkey() interrupt 0
{
delay1(50);
if(sw1 == 0)
{
while(sw1 == 0);
wei3 = 0;
wei4 = 0;
while(1)
{
if(sw2 == 0)
{
delay1(50);
if(sw2 == 0)
{
shangxian++;
while(sw2 == 0);
}
}
if(sw3 == 0)
{
delay1(50);
if(sw3 == 0)
{
shangxian--;
while(sw3 == 0);
}
}
display3(shangxian);
if(sw1 == 0)
{
delay1(50);
if(sw1 == 0)
{
while(sw1 == 0);
break;
}
}
}
}
}
*/
void main()
{
/*
wei1 = 0;
wei2 = 0;
wei3 = 0;
wei4 = 0;
ring = 0;
while(1)
{
if(sw3 == 0)
{
delay1(50);
if(sw3 == 0)
{
wei1 = ~wei1;
while(sw3 == 0);
}
}
}*/
ring = 0;
wei1 = 1;
wei2 = 1;
wei3 = 1;
wei4 = 1;
P2 = 0x00;
// double rp;
// double temp;
sum = 0;
sum_final1 = 0;
shangxian = 4;
// TCON = 0x01;
// IE = 0x81;
while(1)
{
uint j;
for(j = 0; j < 128; j++)
{
sum += read(0);
display1(a1, b1, c1, d1);
// if(sum_final1 < 0)
// display2(c1, d1);
}
sum = sum / 128;//采样128次,求平均
sum_final1 = (sum / 4095) * 5; //转换成电压值
// sum_final1 /= 6.93;
// rp = (5 + 2 * sum_final1) * 80 / (5 - 2 * sum_final1);
// temp = (rp - 100) / 0.39 - 19; //减去焦耳热引起的温度偏差
if(sum_final1 > shangxian)
ring = 1;
else
ring = 0;
sum_final1 = sum_final1 * 100;
a1 = (int)sum_final1 / 1000;
b1 = (int)sum_final1 % 1000 / 100;
c1 = (int)sum_final1 % 1000 % 100 /10;
d1 = (int)sum_final1 % 10;
display1(a1, b1, c1, d1);
// sum = 0;
// sum_final1 = 0;
/* if(sum_final1 < 0)
{
c1 = (int)sum_final1 /10;
d1 = (int)sum_final1 %10;
display2(c1, d1);
}*/
}
//while(1)
//{
//ring = 1;
//_cs = 0;
//}
}
评论1