首页 STC12C5A32S2单片机的ADC采样功能示例

STC12C5A32S2单片机的ADC采样功能示例

举报
开通vip

STC12C5A32S2单片机的ADC采样功能示例 STC12C5A32S2STC12C5A32S2STC12C5A32S2STC12C5A32S2单片机的 ADCADCADCADC采样功能示例(C51C51C51C51) //本程序主要演示了 //1、1602液晶的编程与使用,包括显示定位、显示2/4位整数、显示浮点数等 //2、STC12C5A32S2单片机的 ADC采样功能(以第0、1通道为例) // //注:本示例仅仅演示如何进行 ADC和显示,每 ADC一次就显示一次,实际应用时, //应多次 ADC并进行相应处理,比如取平均值后,才能得到比较...

STC12C5A32S2单片机的ADC采样功能示例
STC12C5A32S2STC12C5A32S2STC12C5A32S2STC12C5A32S2单片机的 ADCADCADCADC采样功能示例(C51C51C51C51) //本程序主要演示了 //1、1602液晶的编程与使用,包括显示定位、显示2/4位整数、显示浮点数等 //2、STC12C5A32S2单片机的 ADC采样功能(以第0、1通道为例) // //注:本示例仅仅演示如何进行 ADC和显示,每 ADC一次就显示一次,实际应用时, //应多次 ADC并进行相应处理,比如取平均值后,才能得到比较稳定的 AD值 //广西民族大学物电学院 李映超 2010.5.26 /* 板子的硬件连接 1、1602液晶显示模块的连接:RS:P2.4、EN:P2.5、数据口: P0 2、蜂鸣器:P2.3 低电平有效(发出声音) 3、继电器:P2.2 低电平有效(继电器吸合、两输出脚短路) 4、18B20数据输出脚(DQ):P2.1 5、红外遥控输出脚:P2.0 6、直流电压精密可调电阻输出:P1.0 可通过跳线帽断开 7、光敏电阻:P1.1 可通过跳线帽断开 8、按键:均通过二极管连接到 P3.2(外部中断0口),低电平有效,下降沿触发 K0:P3.3、 K1:P3.4、 K2:P3.5、 K3: P3.6、 K4:P3.7 9、24C02连接: SDA:P2.7 (上拉有发光二极管,低电平亮) SCL:P2.6 (上拉有发光二极管,低电平亮) */ #include #include #define uint unsigned int #define uchar unsigned char sbit beep=P2^3;//定义蜂鸣器与单片机的连接脚 void delay_ms(uint xms);//ms级延时子函数 //---------与 STC12C5A32S2单片机 ADC相关的寄存器声明------------------ sfr P1ASF =0x9d; //P1口模数转换功能控制寄存器 sfr ADC_CONTR =0xbc; //AD转换控制寄存器 sfr ADC_RES =0xbd; //AD转换结果寄存器高 sfr ADC_RESL =0xbe; //AD 转换结果寄存器低 sfr AURX1 =0xa2; //AD转换结果存储方式控制位 //------------------------------------------------------------------ //P1ASF寄存器:8位,对应 P1口8根口线,用于指定哪根口线用作 ADC功能 //哪个口用作 ADC就应置相应的位为“1”,注意:不能位寻址 //------------------------------------------------------------------ #define ADC_POWER 0x80 //ADC电源开 #define ADC_SPEED 0x60 //设为90个时钟周期 ADC一次 #define ADC_START 0x08 //ADC启动控制位设为开 #define ADC_FLAG 0x10 //ADC结束标志位 /* ADC_CTRL寄存器: ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_STAR CHS2 CHS1 CHS0 1 2 3 4 5 6 7 8 第 1 位: =1 打开 ADC电源;=0 关闭 ADC电源; ADC前要一定要打开 第2-3位: =1 1 90个时钟周期 ADC 一次; =1 0 180个时钟周期 ADC一次; =0 1 360个时钟周期 ADC一次; =0 0 540个时钟周期 ADC一次; 第4位: ADC结束标志位,每次 ADC 结束时自动=1,需要用软件清零才可以进行下一次 ADC 第5位: ADC启动控制位,置“1”则 ADC转换开始,转换结束后为0 第6-7-8位:ADC 通道选择 000-->P1.0 ........111-->P1.7 */ //------------------------------------------------------------- void ADC_int(uchar n) //第 n通道 ADC初始化函数 { n&=0x07; //确保 n=0----7通道 AURX1|=0x04; //转换结果存储格式:数据的高2位放 ADC_RES,低8位放 ADC_RESL P1ASF=1<0;aa--) for(bb=200;bb>0;bb--); //调整数值以使本句运行时间为1ms } //------------------------------------------------------------------------ void lcd_locate(unsigned char x,unsigned char y) { unsigned char aa; if (x==1) aa=0x80; if (x==2) aa=0x80+0x40; lcd_write_com(aa+y-1); } //------------------------------------------------------------------------ void lcd_2_char(unsigned int data_2_char) //在1602LCD上显示一个2位的整数 { unsigned char lcd_table[2]; lcd_table[1]=data_2_char/10; //获得十位的数字 lcd_table[2]=data_2_char%10; //获得个位的数字 lcd_write_data(lcd_table[1]+0x30); //显示十位 lcd_write_data(lcd_table[2]+0x30); //显示个位 } //------------------------------------------------------------------------ void lcd_4_char(unsigned int data_4_char) //在1602LCD上显示一个4位的整数 { unsigned char lcd_table[4]; lcd_table[1]=data_4_char/1000; //获得千位的数字 lcd_table[2]=data_4_char%1000/100; //获得百位的数字 lcd_table[3]=data_4_char%100/10; //获得十位的数字 lcd_table[4]=data_4_char%10; //获得个位的数字 lcd_write_data(lcd_table[1]+0x30); //显示千位 lcd_write_data(lcd_table[2]+0x30); //显示百位 lcd_write_data(lcd_table[3]+0x30); //显示十位 lcd_write_data(lcd_table[4]+0x30); //显示个位 } //----------------------------------------------------------------------- void lcd_float(float f_data) //在1602LCD上显示一个小于100、保留3位小数的浮点数 { unsigned char lcd_table[4]; unsigned long aa; aa=f_data*1000; //保留3位小数 lcd_table[0]= aa/10000 ; //分别获取各位上的数 lcd_table[1]= aa%10000/1000 ; lcd_table[2]= aa%1000/100 ; lcd_table[3]= aa%100/10 ; lcd_table[4]= aa%10 ; if (lcd_table[0]==0) lcd_write_data(' '); //如果整数部分的十位数是0则 不显示(显示空格) else lcd_write_data(lcd_table[0]+0x30); //显示整数部分的十位数,加上 0x30以便直接得到相应的 ASCII码去显示 lcd_write_data(lcd_table[1]+0x30); //显示整数部分的个位数 lcd_write_data('.'); //显示小数点"." lcd_write_data(lcd_table[2]+0x30); //显示小数部分的十分位 lcd_write_data(lcd_table[3]+0x30); //显示小数部分的百分位 lcd_write_data(lcd_table[4]+0x30); //显示小数部分的千分位 } //------------------------------------------------------------------------ void lcd_write_com(unsigned char lcd_com) //LCD送命令子函数 {lcd_rs=0; lcd_data_port=lcd_com; delay_ms(5); lcd_en=1; delay_ms(5); lcd_en=0; } //----------------------------------------- void lcd_write_data(unsigned char lcd_data) //LCD 送显示数据子函数 {lcd_rs=1; lcd_data_port=lcd_data; delay_ms(5); lcd_en=1; delay_ms(5); lcd_en=0; } //---------------------------------------------------------------------- void lcd_int() //LCD初始化子函数 {lcd_en=0; lcd_write_com(0x38); //设置 LCD工作于16x2、5x7点阵、8位数据接口模式 lcd_write_com(0x0c); //开显示,不显示光标 lcd_write_com(0x06); //写一个字符后地址指针自动加1 lcd_write_com(0x01); //清屏 }
本文档为【STC12C5A32S2单片机的ADC采样功能示例】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_496867
暂无简介~
格式:pdf
大小:104KB
软件:PDF阅读器
页数:6
分类:互联网
上传时间:2012-11-01
浏览量:64