1、stc12c5a60s2 AD 采集 12864 串行显示终极程序 带滤波作者:电子工程师 (天津)由于 AD 采集电压并在 12864 上显示的程序很常用,然而网上很多程序各种各样,又有很多缺点,所以就利用工作之余的时间对用到的程序进行了整理,调试,优化以方便各位电子爱好者使用。这段程序已经调试通过,改下 io 即可直接应用。最后有两张效果图。LCD_PSB=0;(并串选择口)LCD_RST =1;(复位口)注意:本程序用的是 12864 串行显示,将 PSB 引脚接地,RST 拉高、片选口 RS 接高之后除了电源和地线,只用 2 根线就可以显示了,接线很方便,最大程度的节省了 io 口。
2、本程序是以电流采集为例的,采集的是电流传感器输出的电压,然后转换成电流,如果只需要采集电压的话将转化为电流的语句删除即可。AD 是 stc12c5a60s2 自带的 10 位AD。使用很方便。有不明白的可以 qq 联系我,1264136841#include“stc12c5a60s2.h“#include“intrins.h“float ADvalue = 0;unsigned int volage = 0;unsigned int current = 0;void InitializeDisplay();void InitializeLcd12864();void displaystring
3、(unsigned char add,unsigned int num);void WriteCommandLcd12864(unsigned char temp);void InitializeDisplay();void InitializeAD();unsigned int ReadADvalue(unsigned char channel);float SmoothingFilter(unsigned int temp);void Delay_us(unsigned int xus);void Delay_ms(unsigned int xms);sbit LCD_SID = P25;
4、/即 RW 口sbit LCD_CLK = P26;/即 E 口code unsigned char name1 = “escrewdriver“;code unsigned char name2 = “电流采集显示“;code unsigned char name3 = “电流: A “;code unsigned char name4 = “参数: mm “;“;void main()/ InitializeAD();/ InitializeTimer0();/ InitializeUart();InitializeLcd12864();InitializeDisplay();while(
5、1)ADvalue = ReadADvalue(0); /读回 AD 值ADvalue = ADvalue*5000/1024; /转换成电压值/* if(ADvalue 2500) /防止电压浮动在 2.5V 以上ADvalue = 2500;ADvalue = 2500-ADvalue; /电流反方向流过传感器,输出电压值小于 2.5V,*/current = (ADvalue*8); /计算电流,每 0.625V 代表 7.5A 即每 1V 代表 12Acurrent = SmoothingFilter(current); /进行一下平滑滤波displaystring(0x8b,curr
6、ent);displaystring(0x9b,0.5*current);/*延时函数*/void Delay_us(unsigned int xus) /11.0592MHzwhile(xus0)_nop_();_nop_();_nop_();void Delay_ms(unsigned int xms) /11.0592MHzunsigned int y=0;for(;xms0;xms-)for(y=0;y0;length-)WriteDataLcd12864(*temp);temp+;/*显示电压和电流*/void displaystring(unsigned char add,unsigned int num)unsigned char buf10,i;buf0 = num/10000;buf1 = num%10000/1000;buf2 = num%1000/100;buf3 = num%100/10;buf4 = num%10;WriteCommandLcd12864(add);for(i=0;i=10)i=0;bufi+ = temp;average = (average+buf0+buf1+buf2+buf3+buf4+buf5+buf6+buf7+buf8+buf9)/10;return average;/*/*/