中级会员
- 积分
- 299
- 金钱
- 299
- 注册时间
- 2019-7-20
- 在线时间
- 108 小时
|
楼主 |
发表于 2020-7-17 22:40:17
|
显示全部楼层
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit BIT_0=P3^0; //控制信号端口定义
sbit BIT_1=P3^1;
sbit BIT_2=P3^2;
sbit BIT_3=P3^3;
sbit CLK=P3^4;
sbit ST=P3^5;
sbit EOC=P3^6;
sbit OUT_EN=P3^7;
uchar code dis_char[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar code dis_add_dot[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};
uchar AD_RESULT; //A/D转换结果
uint DIS_DATA; //A/D转换结果对应的电压值
void Delay(uint m) //延时程序
{
uchar i;
while(--m)for(i=0;i<120;i++);
}
void Display() //显示程序
{
BIT_0=0;
P0=dis_add_dot[DIS_DATA/1000];
Delay(10);
BIT_0=1;
BIT_1=0;
P0=dis_char[(DIS_DATA%1000)/100] ;
Delay(10);
BIT_1=1;
BIT_2=0;
P0=dis_char[(DIS_DATA%100)/10] ;
Delay(10);
BIT_2=1;
BIT_3=0;
P0=dis_char[DIS_DATA%10] ;
Delay(10);
BIT_3=1;
}
void main()
{
TMOD=0x02; //定时器T0方式2,8位可重装初值
TH0=200; //定时器T0赋初值
TL0=200;
IE=0X82; //T0允许,开放总中断
TR0=1; //启动T0
while(1)
{
ST=0; //启动A/D转换
ST=1;
ST=0;
DIS_DATA=P2;
DIS_DATA=DIS_DATA*5.0*1000/255; //此处填写程序
while(AD_RESULT!=0)
{
DIS_DATA=DIS_DATA+20; //1LSB对应20mV电压值
AD_RESULT--;
}
Display();
}
}
void TIMER_T0() interrupt 1 //定时器T0中断
{
CLK=~CLK; //产生CLK信号
}
|
|