51单片机教程ADC0809模数转换

发布者:大头玩家最新更新时间:2015-08-26 来源: eefocus关键字:51单片机  ADC0809  模数转换 手机看文章 扫描二维码
随时随地手机看文章
//MCU:AT89S51

//晶振:12M

//采用查询方式读AD转换后的值

#include

#include "math.h"

#include "intrins.h"

unsigned char code numcode[]={ 0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,

0xC1,0XB7,0xFF

};//数字0~9及"U="”“共阳数码管代码

unsigned char code dot_numcode[]={0X40,0X79,0X24,0X30,0X19,

0X12,0X02,0X78,0X00,0X10

};//带数点的0~9共阳数码管代码

 

unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f}; //数码管位选代码

unsigned char dispbuff[8]={0,0,0,11,10,12,12,12};

unsigned char disp_count;

unsigned char flag=1;

unsigned char flag_count;

unsigned long int getdata;

 

sbit START=P3^0;

sbit EOC=P3^2;

sbit OE=P3^1;

sbit AD_ALE=P3^3;

 

 

void main(void)

{

 

 

TMOD=0x01; //选择定时器T0,方式为1(16位定时器)

TH0=(65536-3000)/256; //定时3MS初值

TL0=(65536-3000)%6;

TR0=1;

ET0=1;

EA=1;

AD_ALE=0;

START=0;

OE=0;

while(1)

{

 

if(flag==1) //每隔40ms启动一次AD采样

 

{

flag=0;

AD_ALE=1; //锁存输入通道

START=0; //驱动AD转换

START=1;

AD_ALE=0;

START=0; //保持低电平

while(EOC==0); //等待AD转换结束

TR0=0; //AD转换结束时先停止T0

P0=0XFF; //关闭数码管显示,呵呵,其实人眼是感觉不到数码管熄灭的

P1=0XFF; // 这个很重要

OE=1; //转换结束,允许AD值输出

getdata=P1; //读出AD值,如果硬件连接上改成P2口来读AD值,这句就改成"getdata=P2;"

OE=0; //禁止输出

getdata=(unsigned long int)((unsigned long int)(getdata*500)/255);//转换成电压

dispbuff[2]=getdata/100;

dispbuff[1]=(getdata0)/10;

dispbuff[0]=getdata;

TR0=1; //重新启动T0

}

}

}

 

void t0(void) interrupt 1

{

 

TH0=(65536-3000)/256;

TL0=(65536-3000)%6;

 

if(disp_count==2)

P0=dot_numcode[dispbuff[disp_count]];

else

P0=numcode[dispbuff[disp_count]];

P1=bitcode[disp_count];

disp_count++;

flag_count++;

if(disp_count==8)

{

disp_count=0;

}

if(flag_count==100)

{

flag=1;

flag_count=0;

}

}

关键字:51单片机  ADC0809  模数转换 引用地址:51单片机教程ADC0809模数转换

上一篇:51单片机摸拟串口(232)
下一篇:51单片机16×16点阵(滚动显示)

推荐阅读最新更新时间:2024-03-16 14:30

51单片机两种减法指令的用法介绍
1.带借位减法指令 SUBBA,Rn;(A)(A)-(Rn)-(C),以下类同。 SUBBA,direct SUBBA,@Ri SUBBA,#data 注意:减法之前先清零C,减法指令无不带借位减法指令。 2.减1指令 DECA;(A)(A)-1,以下类同。 DECRn DEC@Ri DECdirect 例、设(R0)=7FH,在内RAM中,(7EH)=00H,(7FH)=40H 执行:DEC@R0 DECR0 DEC@R0 结果为: (R0)= 7EH,(7EH)=0FFH,(7FH)=3FH。
[单片机]
学习笔记之51单片机键盘篇
(一)基础补充 1.键盘的任务 (1)判别是否有键按下?若有,进入下一步。 (2)识别哪一个键被按下,并求出相应的键值。 (3)根据键值,找到相应键值的处理程序入口。 2.键盘的识别 按键的闭合与否,反映在行线输出电压上就是呈现高电平或低电平,单片机通过对行线电平的高低状态的检测,便可以确认按键是否按下或松开。为了确保单片机对一次按键动作只确认一次按键有效(所谓按键有效,是指按下按键后,一定要再松开),必须消除抖动期t1和t3的影响。 3.如何消除按键的抖动 (1)用软件延时来消除按键抖动,基本思路是:在检测到有键按下时,该键所对应的行线为低电平,执行一段延时10ms的子程序后,确认该行线电平是否仍为低电平,如果仍为低
[单片机]
学习笔记之<font color='red'>51单片机</font>键盘篇
51单片机串口打印不管是中文还是英文都是乱码的问题
讲道理都tm大三暑假了还搞51单片机而且关键是还遇到了一个问题解决了一天才解决出来真的是很丢人了。 不过我会珍惜这个机会的,毕竟这有可能是我辈子最后一次跟着老师搞这个破玩意了。 好了不废话了 收! 昨天遇到的问题是单片机用串口给电脑发数据,本人用串口助手查看时乱码了,发送的数据是英文和数字,没有存在中文,马上进行问题排除: 解决方案一:printf的原因吗? 代码里用piintf函数来进行串口发送数据,可能printf只适合于stm32不能适用于51,但是仔细一想又不对啊,我tm大三上的单片机大作业就是用printf函数进行串口发送数据的啊,怎么当时就可以啊。于是我把当时的代码拿过来修改,还是不行。 解决方
[单片机]
51单片机 16X16点阵循环滚动显示汉字
一、效果展示 二、所用材料 1.16X16点阵 Proteus并不提供16X16的点阵,只能我们自己通过4个8X8的组装为16X16的点阵。 由此可知8*8变成16*16 列需要这样连接: 行需要这样连接: 再把四个放在一起即可: 2.74hc595 详细介绍见我上一篇文章 https://blog.csdn.net/qq_41639829/article/details/82151706 这里需要用到级联,也不算太难,就相当于原来是输入8个数,这需要输入16个,然后再输出,前八个输入的就被自动挤到级联的下一个595中了! 3.stc89c52 三、原理 1.静态显示 同8位的静态显示一
[单片机]
<font color='red'>51单片机</font> 16X16点阵循环滚动显示汉字
keilC支持的51单片机调试方法
需要一种能够调试51内核(VHDL源码可见)的方法,上位机为KEIL程序。找来找去,在keil的help目录下,有相关的具体的调试方法。小结一下: ULINK2:调试ARM的JTAG-USB方法,需要JTAG-USB转换器,不适用51单片机。 MONADI:通过串口调试硬件。支持ADI的硬件。 MON390:针对Dallas 390/400/5240的 调试方法。 flashmod51:通过串口下载、调试程序,同时可以通过串口烧写FLASH,可以再ROM冲任意插入硬件调试断点。 需求: 1 8051兼容 2 需要4-5K的代码空间 3 256 xdata内存 4 片上或者片外的串口 5 6个字节的堆栈空间 6 F
[单片机]
51单片机—单片机扩展外部RAM—6264—08
今天这个是是以前做过的,没做成,扩展ROM的时候失败了~~ 不过今天主要的就是扩展外部的RAM,这个相对比较简单点,不想外部的ROM还要设置太多的编译器~~ 单片机扩展外部RAM 一、扩展总线 1、简介(这种扩展是基于总线扩展的,所以,P0、P2口就已经不可以再做它用了) 1)数据总线宽度为8位,由P0口提供; 2)地址总线宽度为16位,可寻址范围2的16次,也就是64K。低8位A7~A0由P0口经地址锁存器提供,高8位A15~A8由P2口提供。由于P0口是数据、地址分时复用,所以P0口输出的低8位必须用地址锁存器进行锁存; 3)控制总线由RD、WR、PSEN、ALE和EA等信号组成,用于读/写控制、片外RAM选通、地址锁存控制和片
[单片机]
<font color='red'>51单片机</font>—单片机扩展外部RAM—6264—08
34-基于51单片机的教室智能照明控制设计
具体实现功能 系统由STC89C52单片机+时钟芯片DS1302+液晶屏LCD1602+光敏电阻+红外对管+LED灯模块+按键模块构成。 具体功能: 1、用4个LED灯模拟教室的照明灯,人数小于10人亮一个灯,10-20人亮二个灯,20-30人亮三个灯,大于30人则全亮四个灯; 2、教室使用两个红外对管来检测是否有人进入并进行人数统计,人数可以统计到二位数99人,并实时将人数显示到液晶屏LCD上,液晶屏同时显示实时日期/时间/星期; 3、利用光敏电阻检测教室的光线强弱; 4、系统分自动/手动模式,可以通过按键切换模式,并有LED指示当前所在模式; 5、在自动模式下,可以设定定时时间段,在定时时间段内,当教室
[单片机]
34-基于<font color='red'>51单片机</font>的教室智能照明控制设计
AT89C51单片机高速串行输出口设计
    摘要: 介绍使用AT89C51单片机扩展高速串行同步移位输出口的方法,给出基于分立TTL元器件和可编程逻辑器件PLD两种电路的实现方案,在LED点阵显示屏系统中已得到应用。     关键词: 串行口 单片机 可编程逻辑器件 AT89C51(与MCS-51兼容)单片机的串行口在方式0工作状态下,使用移位寄存器芯片可以扩展多个8位并行I/O口。在LED点阵显示屏应用系统中,一般都采用数据同步移位输出方式,并使用移位寄存器芯片(如74LS595)扩展并行I/O口驱动LED点阵显示。LED点阵显示采用扫描方式,为不产生闪烁感,每秒需要传送50屏点阵显示数据,因此有大量的数据要通过同步移位的方式送到显示驱动电路部
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved