STC51单片机学习笔记9——stc12c52 串口显示AD(单路ad+led指示灯)_fengyuzhe13的博客-程序员宅基地

技术标签: STC单片机  stm32  C51  单片机  

stc12le5204ad 为8位AD


//烧写程序时,一定要选用外部晶振(烧写软件默认为内部晶振(5M~6M)),不然还会影响ADC
//烧写时,有时候写不进去,尝试断开地线,然后接上上电

#include<reg51.h>
#include<intrins.h>

sfr P1M1 =0x91;
sfr P1M0  =0x92;
sfr ADC_CONTR = 0xBC;
sfr ADC_RES =0xBD;
sfr P1ASF  =0x9D;

sfr AUXR=0x8e;


#define ADC_POWER 0x80
#define ADC_FLAG  0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define    ADC_SPEEDL  0x20
#define ADC_SPEEDH  0x40     //这个速度,读出的数据噪声很大
#define ADC_SPEEDHH 0x60

unsigned char ch,loop_n;
unsigned int adc_value;

void serial_initial(void);
void send_UART(unsigned char i);
void UART_Interrupt_Receive(void);
void delay(unsigned char n);
void initADC(void);
void print_uint(unsigned int num);
void Long_delay(unsigned char s);

void main()
{
  Long_delay(5);//防止pc运行串口驱动时,与本程序自行向pc发送数据产生冲突,从而产生的混乱
  loop_n=0;
  adc_value=0;
  serial_initial();
  initADC();
  IE|=0xA0;//开启AD中断与总中断
  ADC_CONTR =0x88;
  ch=0;
   while(1)    
   {
/*    if((ADC_CONTR&0xef)!=0)        //使用查询方式测AD值
   {
     adc_value=ADC_RES;
     print_uint(adc_value);
     ch++;
     if(ch>1)
       ch=0;
      ADC_CONTR  =0x88|ch;
     ADC_RES=0;
   }     */
    Long_delay(5);
   }
    
}

void serial_initial(void)      // 使用独立波特率发生器作为波特率发生器
{
    PCON &= 0x7F;        //波特率不倍速
    SCON = 0x50;        //8位数据,可变波特率
    AUXR &= 0xBF;        //定时器1时钟为Fosc/12,即12T
    AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;        //清除定时器1模式位
    TMOD |= 0x20;        //设定定时器1为8位自动重装方式
    TL1 = 0xFD;        //设定定时初值
    TH1 = 0xFD;        //设定定时器重装值
    ET1 = 0;        //禁止定时器1中断
    TR1 = 1;        //启动定时器1
}

void send_UART(unsigned char i)
{
  ES=0;       // 关串口中断
  TI=0;    // 清零串口发送完成中断请求标志
  SBUF=i;    
  while(TI==0);     //   等待发送完成
  TI=0;            //  清零串口发送完成中断请求标志
  //ES=1;        //     允许串口中断
}

void print_uint(unsigned int num)
{
  unsigned char w5,w4,w3,w2,w1;
    
     w5=num/10000;
     w4=num%10000/1000;
     w3=num%1000/100;
     w2=num%100/10;
     w1=num%10;
     send_UART('0'+w5);
     send_UART('0'+w4);
     send_UART('0'+w3);
     send_UART('0'+w2);
     send_UART('0'+w1);
     send_UART(' ');
}


void delay(unsigned char n)
{
   unsigned char x;
   while(n--)
   {
     x=100;
     while(x--);
   }
}

void initADC()
{
  ch=0;
  P1M1=0x03;  //P10、P11作AD输入
  P1M0=0x00;
  P1ASF=0x03;
  ADC_RES=0;
  ADC_CONTR=0x88;//0x88,P10; 0x89,P11

  delay(2);
}

void adc_isr() interrupt 5
{
     adc_value+=ADC_RES;
     loop_n++;
     if(loop_n>4)          //5次取平均数
     {
       adc_value=adc_value/5;
       print_uint(adc_value);
           Long_delay(5);
       ch++;
       if(ch>1)
       {
         ch=0;
         send_UART('*');           
       }
       loop_n=0;
       adc_value=0;           
     }

      ADC_CONTR  =0x88|ch;
     ADC_RES=0;
}
void Long_delay(unsigned char s)
{
  unsigned char i,j,k;
  for(k=0;k<s;k++)
    for(i=0;i<255;i++)
      for(j=0;j<255;j++)
        ;
}

完整资料打包:

STC51单片机学习笔记9-stc12c52串口显示AD(单路ad+led指示灯)资源-单片机文档类资源-CSDN下载

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fengyuzhe13/article/details/127629028

智能推荐

十三、签到和小红点功能_前端点击一下小红点消失-程序员宅基地

当天如果未签到,则在签到的按钮右上角显示一个小红点,点击后红点消失。在主页的fragment创建时判断今天有没有签到,没有签到则显示小红点: private void initData() { if (!SignUtil.isSignedToday()) { // 今日没有签名则显示小圆点 mTitleBarView.s_前端点击一下小红点消失

renderdoc相关_renderdoc error launching com....for capture-程序员宅基地

在移动端上使用很方便,比snapdragon profiler要好点,和Nsight调试桌面版差不多了。记录下自己使用的过程用上述相关工具主要用来分析竞品等,profile一下内容RenderDoc安装使用首先安装,设置下对应安卓sdk,java sdk,在tools-setting-android中然后开启手机的允许USB调试的开关,不同手机可能会有些不太一样,我用的一加..._renderdoc error launching com....for capture

解决Nvidia显卡的电脑安装Ubuntu及驱动的各种坑-程序员宅基地

最近给游戏本装双系统(对没错,我就是用游戏本搞开发的那个人),由于是N卡+Intel核显的电脑(并且是1920*1080及以上的高分屏),装Ubuntu前后遇到各种坑。 下面我们慢慢道来如何爬出这些坑。我遇到的这些坑目前如下,大家可以对号入座: (1)用U盘安装Ubuntu系统,卡死在logo界面(下面那一排进度点根本不动),死活进不去; (2)好不容易把(1)解决了,发现分辨率降低成了800

IDEA上操作Gitlab上面的项目——小白必学_idea gitlab 登录-程序员宅基地

IDEA上操作Gitlab上面的项目安楠大叔 1.我们打开IDEA 2.输入git地址 并导入项目 3.项目导入 4.切换项目分支 5.分支命名 6. 项目分支切换成功 7.项目拉取差异 8.项目提交 9.提交文件选择 10.点击提交 11.同意提交 12.进入推送 13.选择提交的代码并推送 14.项目提交到git上面 安楠大..._idea gitlab 登录

docker教程(5)--compose_dockercompose教程-程序员宅基地

Docker Compose 概念Docker Compose 是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用。 一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过sevices来定义,然后使用docker-_dockercompose教程

python矩阵的分解及其应用(LU分解)_python矩阵lu分解-程序员宅基地

import numpy as np from scipy import linalgdef getMatrix(epsion): A=np.array([[epsion,1],[1,0]],dtype=np.float64) return A def getRHS(): b=np.array([[1],[3.0]],dtype=np.float64) return bdef LUsolution(A,b,epsion): L=np.array([[1,0]._python矩阵lu分解

随便推点

Android签名用keytool和jarsigner制作apk文件-程序员宅基地

Android程序的签名和Symbian类似都可以自签名(Self-signed),但是在Android平台中证书初期还显得形同虚设,平时开发时通过ADB接口上传的程序会自动被签有Debug权限的程序。需要签名验证在上传程序到Android Market上时大家都已经发现这个问题了。Android signed制作方法 首先在Android开发时没有安装JDK的网友在Sun官方网站下载JDKhttp://www.java.net/download/jdk6/6u10/promoted/b32/b

第十六篇 更多关于IPython的系统-程序员宅基地

第二篇中,学习了IPython shell和Jupyter notebook的基础。本篇中,继续探索IPython更深层次的功能,可以从控制台或在jupyter使⽤。一、使⽤命令历史Ipython维护了⼀个位于磁盘的⼩型数据库,⽤于保存执⾏的每条指令。它的⽤途有: 只⽤最少的输⼊,就能搜索、补全和执⾏先前运⾏过的指令; 在不同s..._ipdb > c

AndroidStudio 中使用代码模板(live templates)-程序员宅基地

原文出处:http://blog.csdn.net/vispin/article/details/42453857在Eclipse中经常使用sysout 在按一下Alt+/ 就可以自动打出 System.out.println(""); 了,自动使用AndroidStudio后这样功能怎么用一起找不到.每个高度重复的代码都要再打一遍很让人懊恼.今天分享出来让有这样懊恼的朋友也解决一

Axure Mac汉化_axure mac 汉化-程序员宅基地

1.Axure 8 Mac版下载及安装链接: https://pan.baidu.com/s/1AiHWZ-A787ZNCLzCufftHg 密码: 2qw2打开应用程序中的“axure rp 8”软件,点击“enter license”如图,会弹出注册框然后我们打开软件包中的“serial”文本,将信息填入相应框中,点击“submit”;Name: TEAM BEAN 2015..._axure mac 汉化

PHP中的日期相减函数,sas编程-日期相差计算函数 intnx-程序员宅基地

设计模式学习笔记-Adapter模式Adapter模式,就是适配器模式,使两个原本没有关联的类结合一起使用. 平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类 ...android常用的弹出提示框我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单..._sas两个时间相减csdn

ElasticSearch系列之什么是ElasticSearch?_smileNicky的博客-程序员宅基地

ElasticSearch是一款开源的高扩展的分布式全文检索引擎,可以近实时地查询分析数据。实现基于Lucene,封装了许多Lucene底层的功能,提供了简单易用的RestFul API接口和很多语言的客户端,如Java的高级客户端(Java High Level REST Client)和底层客户端(Java Low Level REST Client)