历史上的今天
今天是:2025年01月02日(星期四)
2020年01月02日 | 单片机DIY小型电压表
2020-01-02 来源:51hei
这款电路简单制作容易的STC12C2052AD单片机0-9.9V电压表,电路简单,元件少,容易制作,PCB板为单面板,下面是制作好的实物。文后附有原理图、源程序等资料。
单片机源程序如下:
#include #include #define uchar unsigned char #define uint unsigned int sbit temp=P1^7; sbit LED3=P3^0; //C sbit LED0=P1^4; // 小数点后一位 sbit LED1=P1^3; //个位 sbit LED2=P1^0; // 十位 sbit A=P1^1; sbit B_B=P1^5; sbit C=P3^2; sbit D=P3^4; sbit E=P3^5; sbit F=P1^2; sbit G=P3^1; sbit H=P3^3; //小数点 char d[5]; uint R,M,N,h;//若定义成uchar型就只能显示2.5V以下的数值 void dm(mz); void delayus(uint x) //(x+1)*6微 { while(x--); } /***************************************************************** 函数名:毫秒级CPU延时函数 调 用:delay (?); 参 数:1-65535(参数不可为0) 返回值:无 结 果:占用CPU方式延时与参数数值相同的毫秒时间 备 注:应用于1T单片机时i<600,应用于12T单片机时i<125 /******************************************************************/ void delay(uint t) { uint i; //定义变量 for(;t>0;t--) //如果t大于0,t减1(外层循环) for(i=600;i>0;i--); //i等于124,如果i大于0,i减1 } /******************************************************************* 函数名:ADC初始化及8位A/D转换函数 返回值:8位的ADC数据 结 果:读出指定ADC接口的A/D转换值,并返回数值 备 注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件) *******************************************************************/ uchar Read (uchar CHA) { uchar AD_FIN=0; //存储A/D转换标志;若在函数外定义此变量则不能得到连续变化的模拟量的显示 /******以下为ADC初始化程序****************************/ CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位) ADC_CONTR = 0x60; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置) _nop_(); ADC_CONTR |= CHA; //选择A/D当前通道 _nop_(); ADC_CONTR |= 0x80; //启动A/D电源 delay(1); //使输入电压达到稳定(1ms即可? /******以下为ADC执行程序****************************/ ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1) _nop_(); _nop_(); _nop_(); _nop_(); while (AD_FIN ==0) //等待A/D转换结束 { AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否 } ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换, return (ADC_DATA); //返回A/D转换结果(8位) } /****************************************************************** 显示函数转换函数: M=模拟量采样值,N=基准电压源采样值(本例为2.5V),R=模拟量输入值(待显示值) N=256*2.5/Vcc;变形后得Vcc=256*2.5/N; 代入M=256*R/Vcc;得到M=R*N/2.5;变形后得R=M*2.5/N 1.105为输入端分压比。 ******************************************************************/ void transfer(void) { M=Read(6); //P1.6口模拟量转换 N=Read(7); //P1.7口2.5V基准电压源采样(转换) R=((M*2.5)/N)*198; //输入模拟量换算并放大500倍; /***以下为3位显示转换***/ h=R; d[3]=R/1000; R=R%1000; d[2]=R/100; R=R%100; d[1]=R/10; d[0]=R%10; } /**********显示函数(未优化)************************************************/ void xian_shi (void) { if(h>999) { d[3]=10; d[2]=10; d[1]=10; d[0]=10; } if(d[3]==0) d[3]=11; dm(d[3]); LED3=1; delayus(5); LED3=0; delayus(30); dm(d[2]); LED2=1; delayus(5); LED2=0; delayus(30); dm(12); LED2=1; delayus(1); LED2=0; delayus(400); dm(d[1]); LED1=1; delayus(5); LED1=0; delayus(30); dm(d[0]); LED0=1; delayus(5); LED0=0; delayus(30); } void dm(mz) { switch(mz) { case 0:A=0;B_B=0;C=0;D=0;E=0;F=0;G=1;H=1;break; case 1:A=1;B_B=0;C=0;D=1;E=1;F=1;G=1;H=1;break; case 2:A=0;B_B=0;C=1;D=0;E=0;F=1;G=0;H=1;break; case 3:A=0;B_B=0;C=0;D=0;E=1;F=1;G=0;H=1;break; case 4:A=1;B_B=0;C=0;D=1;E=1;F=0;G=0;H=1;break; case 5:A=0;B_B=1;C=0;D=0;E=1;F=0;G=0;H=1;break; case 6:A=0;B_B=1;C=0;D=0;E=0;F=0;G=0;H=1;break; case 7:A=0;B_B=0;C=0;D=1;E=1;F=1;G=1;H=1;break; case 8:A=0;B_B=0;C=0;D=0;E=0;F=0;G=0;H=1;break; case 9:A=0;B_B=0;C=0;D=0;E=1;F=0;G=0;H=1;break; case 10:A=0;B_B=1;C=1;D=0;E=0;F=0;G=1;H=1;break; //C case 11:A=1;B_B=1;C=1;D=1;E=1;F=1;G=1;H=1;break; //不显示 case 12:A=1;B_B=1;C=1;D=1;E=1;F=1;G=1;H=0;break; //小数点 } } /****************************************************************** 函数名:主函数 调 用:无 参 数:无 返回值:无 结 果:程序开始处,无限循环 备 注: ******************************************************************/ void main (void) { P1M0 = 0xC0; P1M1 = 0x19; P3M0=0x00; P3M1=0x01; LED0=0; LED1=0; LED2=0; LED3=0; while(1) { uint i; i++; if (i==500) { transfer(); i=0; } xian_shi(); } }
史海拾趣
|
联华众科CPLD开发板 CA127 北京联华众科科技有限公司 http://www.lianhua-zhongke.com.cn Abstract 摘 要:联华众科CPLD开发板CA127核心器件为 Altera MAX II系列的EPM1270,CA127具有丰富的板载资源,由于板载有51 ...… 查看全部问答> |
|
交叉编译疑问:Windows PC上,利用ADS(ARM 开发环境),使用gcc 和armcc编译器 开发环境: 在Windows PC上,利用ADS(ARM 开发环境),使用gcc 和armcc编译器; 查看编译命令中的makefile文件,有用的是\"gcc ******\"(此处省略掉编译的文件名), 也有\"armcc ******\"(此处省略掉编译的文件名),最后用armlink链接。 以前学 ...… 查看全部问答> |
|
在WinCE设备上设置了开机和屏保密码后,用ActiveSync与PC机同步时要求输入密码 我在WinCE设备上设置了开机和屏保密码,开机和屏保密码均正常,但是用ActvieSync与PC机同步时在PC端提示要输入密码,输入前面设置的开机和屏保密码后提示密码错误,连续三次出错后就停止连接了,请问该如何解决?客户要求WinCE设备必须要设置开机和 ...… 查看全部问答> |
|
一,学习嵌入式系统前提 (1)语言基础:较为熟悉C语言的开发,例如头文件的编写管理,一工程多文件协调编程的经验。另外由于很多芯片或者其他资料都是英文而并没那么快汉化,故学习者应有一定的英语阅读基 ...… 查看全部问答> |
|
计算机控制系统输入/输出通道联合仿真(A/D、D/A联合仿真) AD转换芯片采用ADC0809,DA转换芯片采用DAC0832。 用4位数码管显示ADC0809采集的温度(假设为0~100°C,用电位器来模拟,3位整数,1位小数。) 将采集的电压值(数字量00~FFH)不经过PID运算直接送DAC0832输出。对比输出的电压值是否等于 ...… 查看全部问答> |




