标题:
油箱油量表proteus仿真和单片机源程序
[打印本页]
作者:
后起之秀zhi
时间:
2017-5-19 19:51
标题:
油箱油量表proteus仿真和单片机源程序
油箱油量指示报警
捕获.PNG
(42.68 KB, 下载次数: 72)
下载附件
2017-5-19 19:47 上传
程序清单:
#include<reg52.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit Dula=P2^0; //数码管段选使能
sbit Wela=P2^1; //数码管位选使能
sbit ADC_CS=P2^5; //ADC0804的片选端
sbit ADC_RD=P2^6; //ADC0804的读控制
sbit ADC_WR=P2^7; //ADC0804的开始控制
sbit BUZZER=P2^3; //蜂鸣器io口
uchar num=0;
bit flag=0; //第一次转换成功过标志
uchar code table[]={ //无小数点共阴数码管编码
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay_tms(uint t); //t毫秒延时函数
void Display(); //显示函数,以及报警
void ADC0804(); //ADC0804转换函数
void TMOD_Init(); //定时器初始化函数
void main()
{
TMOD_Init(); //初始化定时器
BUZZER=1;
while(1)
{
ADC0804(); //不断地进行数模转化
}
}
void delay_tms(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
void TMOD_Init()
{
TMOD=0X01;
TH0=0xfc;
TL0=0x18;
EA=1;
ET0=1;
TR0=0;
}
void Display()
{
uchar i,buf[4];
uint temp;
temp=num;
temp=temp*200/51;
if(temp<100)
{
P3=0XBF;
TR0=1;
}
else if((temp>=100)&&(temp<900))
{
P3=0xc1;
TR0=0;
}
else
{
P3=0XFE;
TR0=0;
}
buf[0]=table[temp/1000]; //分离数据的百位
buf[1]=table[temp%1000/100]; //分离数据的十位
buf[2]=table[temp%100/10]|0x80; //分离数据的各位,并|0x80,使显示小数点
buf[3]=table[temp%10]; //分离数据的小数点后一位
for(i=0;i<4;i++)
{
Wela=1;
P0=~(0x01<<i) ; //送位选数据
Wela=0;
Dula=1;
P0=buf[i]; //送段选数据
Dula=0;
delay_tms(5);
P0=0XFF; //数码管消隐
}
}
void ADC0804()
{
uchar i;
ADC_CS=0;
ADC_WR=0;
_nop_();
_nop_();
ADC_WR=1; //启动ADC0804的转化
if(flag!=0) //如果转化成功
{
flag=1;
for(i=0;i<8;i++)
Display();
}
ADC_RD=0;
_nop_();
_nop_();
num=P1; //读取ADC0804的转化后的数值
_nop_();
ADC_RD=1;
ADC_CS=1;
flag=1;
Display();
}
void timer() interrupt 1 //中断函数。产生蜂鸣器所需震荡
{
TH0=0xfc;
TL0=0x18;
BUZZER=~BUZZER;
}
复制代码
作者:
是啊啊啊
时间:
2017-6-12 17:16
很好 很适合我 可以好好学习下了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1