本帖最后由 古道热肠 于 2013-8-6 23:40 编辑
论坛搞原创分享活动,俺这版块冷清,于是翻箱倒柜找点存货凑个热闹,呵呵!
先上电压表的成品图
附上原理图PDF格式和Protel格式的如下:
电压表.rar
(11.18 KB)
电压表电路原理图.pdf
(17.77 KB)
还有源代码压缩包如下:
电压表源码.rar
(52.15 KB)
下面是电容表的成品图:
附上原理图PDF格式和Protel格式的压缩包如下:
电容测试仪.pdf
(18.05 KB)
电容测试仪Protel.rar
(23.13 KB)
最后带上源代码压缩包如下:
电容测量.rar
(50.38 KB)
下面讲点代码中的稍微有点内涵的部分,让初学者明明白白,别搞成雾里看花就行
电压表Main中有如下几行
uiCH0_Value = ADConvert(0);
sprintf(ucResultString,"Ch0 = %d\r\n",uiCH0_Value);
printf(ucResultString);
上面3行的功能就是将从AD转换芯片读取到的16进制送串口,通过电脑上的串口调试助手看十进值的电压值,通过电脑的串口检查十进值数据可以判断单片机与AD是否通讯正常,转换的结果是否正确,在没有仿真环境的系统中,将看不到却又非常想看的变量值发送到PC串口显示是很实用的调试手段。sprintf这个函数通吃所有类型的变量值转换成字符串,然后在电脑上看字符串就一目了然了。
ulCH0_Voltage = (uiCH0_Value * 5000l)/255; //求当前电压值,单位mV
uiCH0Integer = ulCH0_Voltage / 1000;
ulCH0Dim = ulCH0_Voltage % 1000;
sprintf(ucResultString,"V= %d.%ldV",uiCH0Integer,ulCH0Dim);
LCDLine1(ucResultString,0,0);
上面几行的功能是将程序内部的电压值(0-255)变换成0-5V的显示内容,比如显示出2.5V,1.8V,让当前电压采样值还原成大家习惯的明了的数据。因为uiCH0_Value的值为0-255,现在要将它变换0-5000之间的数,就是一个比例变换的问题,先乘5000,再除255就OK了。注意要在5000后面加个”L“字符哟,因为结果是长整数,不加时是两个短整型相乘,会出错的,加了字符”L“后,就变成1个短整形和1个长整形相乘了,就不会出现数据自动转换出错的现象了。
下面再来说说电容表吧,电容表是用1个555集成电路构成的多谐振荡器,充电和放电电容就是被测电容,电容越大,振荡频率就越低。设计时将电路分成了独立的两部分,555芯片完成电容测量转频率输出的功能后,此输出波形可以先供助专用的频率计(高级万用表有频率测量功能)来验证电路是否存在问题,然后再把这个已知频率的信号接入到单片机的测量引脚,测试出1S有多少个脉冲,就能反推出电容容值了。
呵呵,有人会问这个555振荡电路的输出信号频率是是怎么算的?查查《数字电路基础》的教课书吧,上面有介绍的。下面有个图,经常找不到书的电工就继续往下看图吧!
呵呵,就说这么多,不明白的大家提问吧,谢谢CCTV,谢谢二姨!谢谢跑堂妹!
|