STC12C5A60S2AD_LCD

  • k3_656329
    了解作者
  • 34.3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-26 07:21
    上传日期
STC12C5A60S2单片机 自带ADC实时采样,将数值显示在1602LCD上,并通过max518实时将显示电压转换输出。 工程建好,代码亲测,可直接下载运行。
STC12AD_LCD_DA.rar
  • STC12AD采集
  • 1602.c
    2.5KB
  • STC12AD.Opt
    2KB
  • STC12AD_Uv2.Bak
    2.2KB
  • delay.OBJ
    577B
  • function.h
    385B
  • STC12AD.Uv2
    2.6KB
  • STC12AD.hex
    2.4KB
  • STC12AD.OBJ
    6KB
  • STC12AD_Opt.Bak
    1.8KB
  • I2C.OBJ
    5.9KB
  • STC12AD.plg
    13.8KB
  • STC12AD.LST
    6.2KB
  • I2C.__i
    77B
  • STC12AD.M51
    16.8KB
  • STARTUP.A51
    6.2KB
  • STC12AD.C
    3.7KB
  • 1602.LST
    5.3KB
  • 1602.OBJ
    5.7KB
  • STARTUP.obj
    908B
  • STC12AD
    15.8KB
  • delay.c
    46B
  • delay.LST
    885B
  • delay.h
    175B
  • STARTUP.lst
    13.8KB
  • STC12AD.lnp
    109B
  • I2C.c
    1.2KB
  • I2C.LST
    3.1KB
内容介绍
#include <stc12.H> #include "intrins.h" #include "function.h" #define uchar unsigned char #define uint unsigned int uchar xdata asc[] = "0123456789"; uchar xdata V0,V1,v00,v11; /*Define ADC operation const for ADC_CONTR*/ #define ADC_POWER 0x80 //ADC power control bit #define ADC_FLAG 0x10 //ADC complete flag 模数转换结束标志位 #define ADC_START 0x08 //ADC start control bit 模数转换启动控制位 //转换速度控制位SPEED0和SPEED1,共四种状态,对应四种转换速度 #define ADC_SPEEDLL 0x00 //540 clocks #define ADC_SPEEDL 0x20 //360 clocks #define ADC_SPEEDH 0x40 //180 clocks #define ADC_SPEEDHH 0x60 //90 clocks /*---------------------------- Get ADC result ----------------------------*/ void GetADCResult0(uchar ch) //这里如有不懂 请仔细看资料 { P1ASF = 0x04; //选择P1口的哪一口 这里的口和ch要对应才能达到选择该口 ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;//0x00|0x00|ch|0x08:选择A/D输入通道,开始A/D转换 // 这么用语句的主要原因就是不能位寻址 // 通道选择在后3位所以直接用一个整数表示ch //例如ch=6 那么对应的后三位就是110 _nop_(); //Must wait before inquiry , _nop_(); //设置ADC_CONTR寄存器后需加4个CPU时钟周期的延时,才能保证值被写入ADC_CONTR寄存器 _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag ADC_CONTR &= ~ADC_FLAG; //Close ADC 将标志位清零等待下次硬件置1 //也可以写成 ADC_CONTR= ADC_CONTR & ( ~ADC_FLAG) V0=ADC_RES*50/256; //Return ADC result(为显示整数,这里将电压值扩大了十倍) v00 = ADC_RES; //5/256 因为是8位 把5V分成256份 ADC_RES为采集的份数 //ADC_RES*(5/256) 为采集的电压值 然后扩大10倍便于计算 } void GetADCResult1(uchar ch) //这里如有不懂 请仔细看资料 { P1ASF = 0x08; //选择P1口的哪一口 这里的口和ch要对应才能达到选择该口 ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;//0x00|0x00|ch|0x08:选择A/D输入通道,开始A/D转换 // 这么用语句的主要原因就是不能位寻址 // 通道选择在后3位所以直接用一个整数表示ch //例如ch=6 那么对应的后三位就是110 _nop_(); //Must wait before inquiry , _nop_(); //设置ADC_CONTR寄存器后需加4个CPU时钟周期的延时,才能保证值被写入ADC_CONTR寄存器 _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag ADC_CONTR &= ~ADC_FLAG; //Close ADC 将标志位清零等待下次硬件置1 //也可以写成 ADC_CONTR= ADC_CONTR & ( ~ADC_FLAG) V1=ADC_RES*50/256; //Return ADC result(为显示整数,这里将电压值扩大了十倍) v11 = ADC_RES; //5/256 因为是8位 把5V分成256份 ADC_RES为采集的份数 //ADC_RES*(5/256) 为采集的电压值 然后扩大10倍便于计算 } void main(void) { init(); //1602初始化 xianshi(); //1602 显示部分 delay(300); while(1) { GetADCResult0(2); lcd_pos(0x08); lcd_date(asc[V0/10]); lcd_date('.'); lcd_date(asc[V0%10]); OutputMax518(0x58, 0, v00); GetADCResult1(3); lcd_pos(0x48); lcd_date(asc[V1/10]); lcd_date('.'); lcd_date(asc[V1%10]); OutputMax518(0x58, 1, v11); } }
评论
    相关推荐
    • 单片机课件
      单片机的课件及例题, 单片机的课件及例题, 单片机的课件及例题, 单片机的课 件及例题,
    • 爱上单片机
      一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章。本书通过生动的语言...
    • 单片机资料
      内含30个单片机应用开发的资料,包括配套单片机入门PPT。
    • 单片机课件
      单片机课的课件,对单片机的基础进行了全面的概述,也有非常精细的指导。
    • 单片机工具
      单片机工具 供单片机学习使用 免费资源 日后还会有更多资源 请联系我
    • 单片机
      单片机c 和汇编程序
    • 单片机课件
      单片机课件 ppt文件格式 介绍了单片机的结构、程序设计、定时器、中断等
    • 单片机教程
      这是一个单片机的教程,可以用于初次学习单片机的人学习。
    • 单片机入门
      很好的单片机学习资源,入门比较好适合对单片机的学习有兴趣的人,而且是名校的精彩讲解,
    • 单片机
      利用protues仿真实现基于51单片机的大棚温湿度检测系统设计