标题:
注释详细的ADC0808数模转换(电压检测)单片机源程序+仿真
[打印本页]
作者:
瓦莉拉丶
时间:
2018-10-19 23:54
标题:
注释详细的ADC0808数模转换(电压检测)单片机源程序+仿真
ADC0808仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(15.33 KB, 下载次数: 88)
下载附件
2018-10-20 00:25 上传
单片机源程序如下:
#include <reg51.h>//包含头文件reg51.h
sbit CLOCK=P2^4;//定义ADC0809的CLOCK引脚
sbit EOC=P2^5; //定义ADC0809的EOC引脚
sbit START=P2^6; //定义ADC0809的START引脚
sbit OE=P2^7; //定义ADC0809的OE引脚
sbit high_bit=P3^0; //定义数码管的高位位选通
sbit low_bit=P3^1; //定义数码管的低位位选通
unsigned char ADC_val;//定义AD转换结果暂存
unsigned char table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
};//0~9的段码表
unsigned char table1[]=
{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
};//0.~9.的段码表
void display(unsigned char);//显示函数声明
void delayms(unsigned int);//延时函数声明
//主程序
void main()
{
while(1)
{
START=0;START=1;START=0;//启动A/D转换
while(EOC); //等待EOC变低
while(!EOC);//等待EOC变低,转换结束
OE=1;ADC_val=P0;OE=0;//读转换结果
display(ADC_val);//显示16进制转换结果
}
}
//显示函数
void display(unsigned char ADC_display)
{
unsigned char display_high,display_low;
//把两位十六进制的模数转换结果拆分出低位
display_low=((ADC_display+1)*50/255)%10;
//把低位数的段码通过P1口送到低位数码管
P1=table[display_low];
low_bit=1;//选通两位数码管的低位
delayms(10);//延时10ms
low_bit=0;
//把两位十六进制的模数转换结果拆分出高位
display_high=((ADC_display+1)*50/255)/10;
//把高位数的段码通过P1口送到高位数码管
P1=table1[display_high];
high_bit=1;//选通两位数码管的高位
delayms(10);//延时10ms
high_bit=0;
}
//延时函数
void delayms(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=114;j>0;j--);
}
复制代码
所有资料51hei提供下载:
ADC0808模数转换.rar
(64.85 KB, 下载次数: 101)
2018-10-19 23:54 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
可叹的小草
时间:
2020-3-13 20:04
今天写这个半天写不出来快自闭了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1