网站首页 > 资源文章 正文
//**************************************************************
/*简易数字电压表制作——ADC0832模数转换应用程序(C语言版)
/*目标器件:AT89S52 */
/*晶振:12.000MHZ */
/*编译环境:Keil uVision2 V2.12 */
//*****************************************************************
#include <reg51.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
/*******************************定义全局变量********************************/
unsigned char dat=0x00 ; //AD值
unsigned char count = 0x00; //定时器计数
unsigned char channel; //通道变量
//ADC0832的引脚
sbit ADCS =P1^4; //ADC0832 chip seclect
sbit ADDI =P1^6; //ADC0832 k in
sbit ADDO =P1^6; //ADC0832 k out
sbit ADCLK =P1^5; //ADC0832 clock signal
unsigned char dispbitcode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位扫描
unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; //共阳数码管字段码
unsigned char dispbuf[3];
/*******************************共阳LED段码表*******************************/
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint temp;
uchar dat; //获取ADC转换回来的值
/****************************************************************************
函数功能:AD转换子程序
入口参数:CH
出口参数:dat
****************************************************************************/
//采集并返回
unsigned int Adc0832(unsigned char channel) //AD转换,返回结果
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=channel&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=(channel>>1)&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
dat<<=1;
if(i==7)dat|=ADDO;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO;//收数据
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1;//拉低CS端
ADCLK=0;//拉低CLK端
ADDO=1;//拉高数据端,回到初始状态
dat<<=8;
dat|=ndat;
return(dat); //return ad k
}
/**************************************************************************
函数功能:延时子程序
入口参数:
出口参数:
****************************************************************************/
void delay(void)
{
int k;
for(k=0;k<500;k++);
}
/******************************************************************************
函数功能:数码管显示函数
入口参数:
出口参数:
******************************************************************************/
void display(void)
{
P2=0xff;
P0=tab[dispbuf[2]] & 0x7f; //显示个位和小数点
P2=0xfb;
delay();
P2=0xff;
P0=tab[dispbuf[1]]; //显示小数点后第一位
P2=0xfd;
delay();
P2=0xff;
P0=tab[dispbuf[0]]; //显示小数点后第二位
P2=0xfe;
delay();
}
/****************************************************************************
函数功能:定时器中断延时程序 这一段的作用时隔一段时间抽样一次 否侧显示的最后一位会不稳定
入口参数:
出口参数:
****************************************************************************/
void timer0(void) interrupt 1
{
TMOD = 0x01;
TH0 = 0x00;
TL0 = 0x00;
IE = 0x82;
TR0 = 01;
count++;
if (count == 0x0A)
{
count = 0x00;
dat= Adc0832(channel);
}
}
/****************************************
函数功能:主程序
入口参数:
出口参数:
****************************************/
void main(void)
{ P2=0xff; //端口初始化
P0=0xff;
channel=0x00; //channel=0
TMOD = 0x01;
TH0 = 0x00;
TL0 = 0x00;
IE = 0x82;
TR0 = 01;
while(1)
{
temp=dat*1.0/255*500; //电压值转换,5V做为参考电压,分成256份。
dispbuf[0]=temp%10; //个位
dispbuf[1]=temp/10%10; //十位
dispbuf[2]=temp/100%10; //百位
display();
}
}
猜你喜欢
- 2024-10-04 reg52.h文件中的sfr到底是个啥玩意?
- 2024-10-04 嵌入式工程师到底要不要学习ARM汇编指令?
- 2024-10-04 新建一个STM32的Keil V5工程(keil5新建stm32工程详细图解)
- 2024-10-04 单片机STM32开发,自学第一天(stm32单片机编程教程)
- 2024-10-04 STM32单片机开发之打通调试信息输出功能
- 2024-10-04 想学嵌入式?keil都不会用可不行(嵌入式学啥语言)
- 2024-10-04 Arm Keil MDK v5.30版本官宣,快来下载
- 2024-10-04 如何使用VS Code 编辑Keil项目(51/STM32)
- 2024-10-04 关于KEIL,你应该知道的事(keil的主要功能和作用)
- 2024-10-04 单片机入门教程之Keil实用教程(单片机编程步骤keil4)
你 发表评论:
欢迎- 07-03win7去掉桌面图标小箭头怎么操作 win7桌面快捷方式箭头怎么去除
- 07-03win7声音图标不见了怎么办(windows7声音没了怎么办)
- 07-03男生勿入:Win10/Win7/Win8.1女生图标下载
- 07-03桌面只有回收站图标,给Win7/10系统在桌面添加“计算机”图标
- 07-03经典windows桌面图标手机壁纸(经典windows桌面背景)
- 07-03如何在Win10启用Win7/Win8.1通知区域图标设置?
- 07-03win7声音图标不见了解决步骤(win7旗舰版声音图标不显示)
- 07-03为什么回收站图标没了?win11/win10/win7电脑如何显示回收站图标
- 最近发表
-
- win7去掉桌面图标小箭头怎么操作 win7桌面快捷方式箭头怎么去除
- win7声音图标不见了怎么办(windows7声音没了怎么办)
- 男生勿入:Win10/Win7/Win8.1女生图标下载
- 桌面只有回收站图标,给Win7/10系统在桌面添加“计算机”图标
- 经典windows桌面图标手机壁纸(经典windows桌面背景)
- 如何在Win10启用Win7/Win8.1通知区域图标设置?
- win7声音图标不见了解决步骤(win7旗舰版声音图标不显示)
- 为什么回收站图标没了?win11/win10/win7电脑如何显示回收站图标
- Win7怎么更换本地磁盘图标?(win7桌面改d盘)
- Win7桌面图标消失怎么办?(win7桌面图标全没了怎么办)
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)