📄 lesson.c
字号:
/* 51hei单片机实验板演示程序 */
/* 网站:http://www.51hei.com */
//通过控制A/D转换程序我们可以直观的通过调节电位器让改变的电压用LED或者是数码管表现出来
#include"AT89x52.h"
#include"intrins.h"
#include"math.h"
#define uint unsigned int
#define uchar unsigned char
sbit ADC0804_SC=P3^5;
sbit ADC0804_RD=P3^7;
sbit ADC0804_WR=P3^6;
sbit DUAN=P2^0; //74HC573的LE端 LED的段选端
sbit WEI=P2^1; //74HC573的LE端 LED的位选端
sbit SJ=P1^4; //LED的使能端
uchar Temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴显示字库
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void adc0804_start() //AD0804的启动函数
{
ADC0804_WR=1;
ADC0804_WR=0;
ADC0804_WR=1;
}
void wei_1(uchar wei)
{
WEI=1;
P0=wei;
WEI=0;
}
void duan_1(uchar duan)
{
DUAN=1;
P0=Temp[duan];
DUAN=0;
}
void jishuan(uchar DATA)
{
uchar i;
uchar ge,shi,bai,qian;
ge=DATA%1000%100%10;
shi=DATA%1000%100/10;
bai=DATA%1000/100;
qian=DATA/1000;
if(DATA<10)
{
duan_1(ge);
wei_1(0xfe);
}
if(DATA>=10&&DATA<100)
{
duan_1(ge);
wei_1(0xfd);
for(i=0;i<100;i++);
duan_1(shi);
wei_1(0xfe);
}
if(DATA>=100&&DATA<1000)
{
duan_1(ge);
wei_1(0xfb);
for(i=0;i<100;i++);
duan_1(shi);
wei_1(0xfd);
for(i=0;i<100;i++);
duan_1(bai);
wei_1(0xfe);
}
for(i=0;i<100;i++);
}
main()
{
uchar ADC0804_data;
ADC0804_SC=0; //让SC一直为低
SJ=0;
while(1)
{
adc0804_start(); //启动ADC0804
delay(1); //延时
ADC0804_RD=0; //RD为低
ADC0804_data=P1; //将ADC0804的数据传出
ADC0804_RD=1; //RD为高
// P0=ADC0804_data; //将数据附给P0口让LED显示出来
jishuan(ADC0804_data); //或者把数据让数码管显示出来,
} //这个函数在原来的动态扫描中直接调用就行了
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -