程序 基于压频转换芯片的数据采集系统设计 河南理工大学单片机课设
1 源程序代码
/*****功能显示电压值****/
#include<STC10F08XE.H>
#include <intrins.h>
unsigned char code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7};
unsigned char disp[4];
int f,count,count1,vv;
sbit led=P2^0;
sbit led1=P2^1;
float v;
/*void Delay100ms() //@11.0592MHz
{
unsigned char i, j;
i = 180;
j = 73;
do
{
while (--j);
} while (--i);
}*/
void display(unsigned char firstbit,unsigned char num)//显示
{
static unsigned char i=0;
P1=0x00; //清空数据,防止有交替重影
P0=wei[i+firstbit]; //取位码
P1=disp[i]; //取显示数据,段码
i++; //扫描四次
if(i==num)
i=0;
}
void Init_Timer1(void)
{
TMOD|=0x10;
TH1=(65536-46080)/256;
TL1=(65536-46080)%256;
EA=1; //开总中断
ET1=1; //开定时器中断
EX0=1; //外部中断0开
IT0=1; //下降沿触发
//TR1=0; //开定时器开关
程序 基于压频转换芯片的数据采集系统设计 河南理工大学单片机课设
}
void main()
{
P1M0=0XFF; //推挽
P1M1=0X00;
Init_Timer1();
while(1)
{
display(0,4);
disp[3]=duan[vv%1000%100%10]; //各段显示
disp[2]=duan[vv%1000%100/10];
disp[1]=duan[vv%1000/100];
disp[0]=duan[vv/1000]|0x80;
}
}
void Timer1(void) interrupt 3 //定时器1
{
TH1=(65536-46080)/256; //延时50ms
TL1=(65536-46080)%256;
count1++;
if(count1==20) //计1s
{
count1=0;
f=count;
v=(f/13000.0)*4.7*1000.0; // 4.7为单片机的供电电压 乘以1000便于显示
//v=(f*2.09*4.5*0.1026*0.5)/1.71; // 这个是利用公式显示
vv=(unsigned int)v;
count=0;
led=~led; //指示而已
led1=~led1;
}
}
void ISR_Key(void) interrupt 0 //外部中断0
{
TR1=1; //开定时器开关
count++;
}
程序 基于压频转换芯片的数据采集系统设计 河南理工大学单片机课设