📄 psener.c
字号:
#include"reg52.h"
#include"stdio.h"
#include"intrins.h"
#include "LED.h"
#include "44KEY.h"
#define uchar unsigned char
#define uint unsigned int
char AsciiArray[5];
unsigned int j;
uint fg;
char fgf;
sbit TLC1549_CLK = P3^2; //AD_CLK
sbit TLC1549_DOUT = P3^3; //AD_DOUT
sbit TLC1549_CS = P3^4; //AD_CS
uint result=0;
uint flag1;
uint t0,t1; //转换变量初始化为0
uint IntNumber;
void InttoChar (uint IntNumber)
//---------------------------------------------------------
// Name: void InttoChar (int IntNumber)
// Func.: Translate integer to ASCII charactor array
// Char.: IntNumber number to be translated to ASCII charactor
//---------------------------------------------------------
{
if (IntNumber < 10)
{
AsciiArray[0] = IntNumber + 0x30;
AsciiArray[1] = 0x20;
AsciiArray[2] = 0x20;
AsciiArray[3] = 0x20;
AsciiArray[4] = 0x20;
return;
}
if (IntNumber < 100)
{
AsciiArray[0] = IntNumber / 10 + 0x30;
AsciiArray[1] = IntNumber % 10 + 0x30;
AsciiArray[2] = 0x20;
AsciiArray[3] = 0x20;
AsciiArray[4] = 0x20;
return;
}
if (IntNumber < 1000)
{
AsciiArray[0] = IntNumber / 100 + 0x30;
AsciiArray[1] = IntNumber % 100 / 10 + 0x30;
AsciiArray[2] = IntNumber % 10 + 0x30;
AsciiArray[3] = 0x20;
AsciiArray[4] = 0x20;
return;
}
if (IntNumber < 10000)
{
AsciiArray[0] = IntNumber / 1000 + 0x30;
AsciiArray[1] = IntNumber % 1000 / 100 + 0x30;
AsciiArray[2] = IntNumber % 100 / 10 + 0x30;
AsciiArray[3] = IntNumber % 10 + 0x30;
AsciiArray[4] = 0x20;
return;
}
else
{
AsciiArray[0] = IntNumber / 10000 + 0x30;
AsciiArray[1] = IntNumber % 10000 / 1000 + 0x30;
AsciiArray[2] = IntNumber % 1000 / 100 + 0x30;
AsciiArray[3] = IntNumber % 100 / 10 + 0x30;
AsciiArray[4] = IntNumber % 10 + 0x30;
return;
}
}
static void mDelay(j)
{
unsigned int i;
for(;j>0;j--)
{
for(i=124;i>0;i--)
{;}
}
}
void adelay(uchar us) //delay time
{
while(us--);
}
uint adc()
{
uint u=0;
uchar i;
TLC1549_CS=1; //先高电平,禁止I/O CLOCK
_nop_();
TLC1549_CLK=0;
_nop_();
TLC1549_CS=0; //开启控制电路,使能DATA OUT和I/O CLOCK
for(i=0;i<10;i++) //read data
{
TLC1549_CLK=0; //时钟下降沿
_nop_();
u=(u<<1)|TLC1549_DOUT; //读取数字放在16位u中
TLC1549_CLK=1; //时钟的上升沿每个时钟取一次数
_nop_();
}
for(i=0;i<10;i++);
adelay(2); //延时21uS 有问题???
TLC1549_CS=1; //DOUT 返回到高阻状态而终止序列
return(u); //返回AD转换后的值
}
void Psener(void)
{
uint i,a=0,temp,temp1;
float u1,sum=0;
mDelay(30);
while(1)
{
u1=0;sum=0;
KeyScan();
KeyFree();
for(i=0;i<30;i++)
{
u1=adc();
temp=((500*(u1))/(1023));//扩大100倍
sum=sum+temp-30;
}
temp1=sum/30;
fg=(temp1*50)/2.5;
//fgf=fg;
if(fg<0||fg>5000)
fg=0;
InttoChar(fg);
if(fg>=0&&fg<=5000)
{
sel1= fg%10;
// ascii[0]=sel1+48;
fg= fg/10;
sel2= fg%10;
//ascii[1]=sel2+48;
fg= fg/10;
sel3= fg%10;
//ascii[2]=sel2+48;
fg= fg/10;
sel4= fg%10;
// ascii[3]=sel2+48;
sel8=12;
}
if(flag1==4) //如果测量的是温度
{
for(a=50;a>0;a--)
{
led_show4();
}
}
else if(flag1==3) //如果上位机测量
{
break;
}
if(key==1) //如果要退出
{
mDelay(100);
if(key==1)
{
key=0;
P0=0xff;
fg=0;
flag1=0;
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -