bg8wj 发表于 2010-10-24 19:23:58

STC12c5a60s2 AD+12864液晶驱动 有图有真相

首先声明不是马甲!
老在论坛中看到有人对stc的jj,评价的如何的差。因为工程需要选型stc12c60s2 的片子,在此客观公正的评价stc的产品。在此鄙视那些只会照抄别人的程序还jjyy的人。
客户要求:要做一个成本最低(<=10元)的AD采样电压表(测量范围0-5v)。要求进度到小数点后一位。并且要求能够双串口通信(TTL信号)。能够未来实现pwm输出。
选型:STC12c5a60s2 淘宝7.5元/片。 一共10片 75元+运费10元 85元 成本8.5元。 晶振+30p 电容两只=1元。 (直接拆旧货市场淘宝板子。40元/公斤。)
程序设计:使用10位AD转换后 取9-2bit结果,经中位值平均滤波器输出最终ad结果 在做转换。人工校准ADVcc。
程序ok后运行测试如下。http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592445RCHKHY.jpg
(原文件名:101024A000.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592446PDGFY9.jpg
(原文件名:101024A001.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592447Z75V6L.jpg
(原文件名:101024A002.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592448WIZX5F.jpg
(原文件名:101024A003.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592449GSSPHP.jpg
(原文件名:101024A004.jpg)
采样数据经串口输出AD_REG值,和滤波输出值比较。串口数据格式:channel+ad_reg+filter+0d+0a


实际运行后得出的结论,1、stc芯片确实存在ad采样数值的漂移,但是漂移的程度远远没有达到传说中的乱跳的情况。现对来说stc的ad输出甚至比我的滤波函数处理过的输出值稳定点。当然前提是硬件电路设计时需要认真考虑稳压设计。我用的是lm2596ADJ供电。
2、stc 的串口下载不稳定的问题肯定没有。实际测试我每次调试均从新串口下载,用老y提供的软件。3小时内下载了59次。没有一次失败。倒是下载软件ver4.86曾经自己推出过。这是以前在ver 4.80上没有出现过的。当然我的rs232接口芯片采样的是正规的max芯片外接电容使用的是10uF。串口是pcmaci扩展出来的。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592451ZI9JSJ.jpg
(原文件名:串口isp.jpg)
3.在驱动液晶片没有传说中的乱码出现,我试过8bit并口输出,和spi三线输出均未出现液晶乱跳(st7920控制器)。液晶是便于调试用的,呵呵不计入客户成本。我淘宝的一片就50元啊。驱动自己写的。
最后推荐一下论坛里清风大哥的51 0-40v可调电源。我的输出显示屏就是借鉴他的硬件设计,嘿嘿我也是照抄的典型。另外希望清风大哥多搞点51的东东。毕竟成本好低啊。
程序结构上我比较推荐安徽师范大学Lyzhangxiang的EasyHW OS结构设计。结构层次分明,不论是老鸟、菜鸟一看就懂。毕竟混乱的程序代表混乱的硬件设计,二者相加就是失败的产品。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592450F744HU.jpg
(原文件名:程序.jpg)
一句话客观的评价老y的风格:感谢CCTV电视剧插播广告的创意模板,给了老y以灵感!datasheet插播广告,确实恶心。
最后还是要感谢老y,嘿嘿,毕竟老y还是咱中国人,山寨了一个51jj,才使我等没钱的主,踏上数字时代的快车,什么河洛编程器,在线仿真仪,laoz都扔掉,一样搞开发。

bg8wj 发表于 2010-10-24 19:33:12

附上测试程序,设计商品开发源码占时不发,发个hex。供给位看客测试。
点击此处下载 ourdev_592466G4ILF9.rar(文件大小:2K) (原文件名:ut60电压表.rar)
引脚定义 p1.0 AD 直接输入,
sbit CS=P2^2;                               //LCD12864串行通信片选
sbit SID=P2^1;                                  //LCD12864串行通信数据口
sbit SCLK=P2^0;                               //LCD12864串行通信同步时钟信号
//sbit PSB=P2^5;                           //LCD12864并/串选择:H并行 L串行
                                          //LCD12864并/串选择:H并行 L串行硬件设计上 psb用跳线帽选择 串并模式。   
#define FOSC 22118400L                     //系统时钟22.1184Mhz
#define BAUD 9600                           //波特率
#define AD_int_Vcc506                    //实测芯片供电Vcc=5.06V
#define filter_N 12                        //滤波参数选择12               
//-----------------AD采样--------------------老y自己给的ad测试代码 直接照搬。

unsigned char GetADCResult(unsigned char ch)
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
    _nop_();                        //Must wait before inquiry
    _nop_();
    _nop_();
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC
        return ADC_RES;               //Return ADC result
}

zhxzhx 发表于 2010-10-24 20:07:11

你这个AD只用了8Bit,还要把低两位加上.
看错了,你只要小数点后一位啊

zzjjhh250 发表于 2010-10-24 20:43:58

小狂……呵呵

bg8wj 发表于 2010-10-24 20:50:52

继续测试 stc12c5a60s2,一样的板子一样的电路,gps 显示终端。测试并口写12864。
修改引脚定义。
#define LCD_DATA                         P0      //LCD的数据口

sbit LCD_BUSY=LCD_DATA^7;//LCD忙信号位

//-----------LCD 控制信号------------------------
sbit LCD_EN= P2^0;          //LCD使能信号
sbit LCD_RW= P2^1;          //LCD读写控制
sbit LCD_RS= P2^2;          //LCD寄存器选择H=data; L=command;
sbit LCD_CS1 = P2^3;
sbit LCD_CS2 = P2^4;
sbit LCD_CS3 = P2^5;
sbit LCD_RST = P2^6;               //Reset Signal 低电平有效
sbit LCD_PSB = P2^7;               //PSB跳线选择工作方式 H=并口; L=串口;

测试效果http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592490TTHBV2.jpg
(原文件名:101024A000.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592491P6SOJX.jpg
(原文件名:101024A001.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592492ZGWVJ8.jpg
(原文件名:101024A002.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592493WT0CU0.jpg
(原文件名:101024A003.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592494O76EF9.jpg
(原文件名:101024A004.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592495W8K58J.jpg
(原文件名:101024A005.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592496KVB5O9.jpg
(原文件名:101024A006.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592497J4Z1B2.jpg
(原文件名:101024A007.jpg)
gps显示器hex 文件。
点击此处下载 ourdev_592498ZH7NBR.rar(文件大小:6K) (原文件名:gps_c51_display_12864.rar)
用串口助手打开直接文件输出用的调试gps语句。
gps 调试测试用文件ourdev_592499ULR2G5.txt(文件大小:30K) (原文件名:nmea.txt)

zhuyi25762 发表于 2010-10-24 21:04:09

你这程序有这么机密吗?楼主AD和显示部分程序是否是参考这里的,http://blog.csdn.net/djimon/archive/2010/08/29/5848284.aspx

基本改都没改呀,呵

/****************************************************************************
* 文件名:AD_CAIYANG.C
* 功能:使用AD采集电压显示在LCD
* 说明:转自网络,本人验证通过
****************************************************************************/
#include<STC12C5A60S2.H>   
#define uint   unsigned int   
#define uchar unsigned char   

sbit CS=P2^0;         //LCD12864串行通信片选   
sbit SID=P2^1;         //LCD12864串行通信数据口   
sbit SCLK=P2^2;         //LCD12864串行通信同步时钟信号   
sbit PSB=P2^5;         //LCD12864并/串选择:H并行 L串行   
unsigned int temp1,sh1,ge1,n1,m1;   
unsigned char ad_result_data;   //AD转换高八位   
unsigned char ad_result_low2;   //AD转换低八位   
unsigned char ad_result_total;   //AD转换总十位   
unsigned char ad_average_result;   //AD转换十次的平均值   
unsigned char Ain,Vin;   
unsigned char b,t,R;   
char tp=0;   
unsigned char code ma1={0xb5,0xe7,0xd1,0xb9,0xa1,0xc3}; //电压:   
unsigned char code ma2[]={"."};   
uchar code disp1[]={"提示: 按1 键进入"};   
uchar code disp2[]={"功能选择界面. "};   
unsigned char code num0[]={0xa3,0xb0};   
unsigned char code num1[]={0xa3,0xb1};   
unsigned char code num2[]={0xa3,0xb2};   
unsigned char code num3[]={0xa3,0xb3};   
unsigned char code num4[]={0xa3,0xb4};   
unsigned char code num5[]={0xa3,0xb5};   
unsigned char code num6[]={0xa3,0xb6};   
unsigned char code num7[]={0xa3,0xb7};   
unsigned char code num8[]={0xa3,0xb8};   
unsigned char code num9[]={0xa3,0xb9};   

//-------模块延时程序---------------------------- 1ms   
void delay1ms(uint delay1ms) //STC11F60XE,22.1184M,延时1ms   
{   
uint i,j;   
for(;delay1ms>0;delay1ms--)   
   for(i=0;i<7;i++)   
   for(j=0;j<210;j++);   
}   

void delay(uint delay) //STC11F60XE,22.1184M,延时170us   
{   
uint i,j;   
for(;delay>0;delay--)   
   for(i=0;i<124;i++);   
   for(j=0;j<124;j++);   
}   

/*******************************************************
                  AD转换程序
*******************************************************/
void AD_initiate() //初始化函数   
{   
ES=0;   
TMOD=0x21; //定时计数器方式控制寄存器,"自动重装,16位计数器".   
SCON=0x50; //串行控制寄存器,方便在串口助手那观察   
TH1=0xfa;   
TL1=0xfa;   
TR1=1;   
}   

void ADC_Power_On()      //AD转换电   
{   
ADC_CONTR|=0x80;   
delay(5);   //必要的延时   
}   

void get_ad_result() //取AD结果函数,它是十位AD转换,每十次平均,最后取低八位作为AD采样数据   
{   
uint i,q=0;   
for(i=0;i<10;i++)   
   {   
       tp=0;   
       ADC_RES=0;   //高八位数据清零,STC12C5A60S2 AD数据寄存名与STC12C54××系列不同   
    ADC_RESL=0;    //低两位清零   
       ADC_CONTR|=0x08; //启动AD转换   
       while(!tp)   //判断AD转换是否完成   
         {   
         tp=0x10;   
         tp&=ADC_CONTR;   
         }      
      ADC_CONTR&=0xe7;   
   ad_average_result=ADC_RES;   
   q=q+ad_average_result;   
   }   
   ad_average_result=q/10;   
   //ad_average_result=ad_average_result*4*5000/1024;   
}   
/************************AD转换结束***********************/


void send_ad_result() //取AD结果函数发送到串口,方便调试   
{                  
   SBUF=n1;   
   while(TI==0) ;   
    TI=0;   
   delay1ms(100);   
   //SBUF=R>>4;   
}   


//---------------------电压采样程序-------------------------   
void caiyangP10()   //测电压   
{   
P1M0|=0x01;         //设P1_0为开漏模式 如: P1_0= #00000000B   
P1M1|=0x01;   
ADC_CONTR=0xe0;   //设置P1.0为输入AD转换口   
delay(2);   
get_ad_result();      //取转换数据   
Vin=ad_average_result;   
R=Vin;   
}   


/*-----------写控制字到LCD12864------------*/
void write_cmd(uchar cmd)   
{   
uchar i;   
uchar i_data;   
i_data=0xf8;          //命令控制字:11111000写指令 11111010写数据 11111100读状态 11111110读数据   
CS=1;          //片选置高,才能进行读写操作   
SCLK=0;   
/*----------写命令控制字-----------------*/
for(i=0;i<8;i++)       //循环八次,每次读取一位数据   
{   
   SID=(bit)(i_data&0x80);   //bit表示取其最高位   
   SCLK=0;   
   SCLK=1;         //正跳变写入指令   
   i_data=i_data<<1;      //左移一位   
}         
/*---------------------------------------*/

/*----------写指令高四位-----------------*/
i_data=cmd;   
i_data=i_data&0xf0;       //把低四位置0   
for(i=0;i<8;i++)       //循环八次,每次读取一位数据   
{   
   
   SID=(bit)(i_data&0x80);   //bit表示取其最高位   
   SCLK=0;   
   SCLK=1;         //正跳变写入指令   
   i_data=i_data<<1;      //左移一位   
}                  
/*---------------------------------------*/

/*----------写指令低四位-----------------*/
i_data=cmd;   
i_data=i_data<<4;       //左移四位,把低四位的数据移到高四位,再把低四位置0   
for(i=0;i<8;i++)       //循环八次,每次读取一位数据   
{   
   
   SID=(bit)(i_data&0x80);   //bit表示取其最高位   
   SCLK=0;   
   SCLK=1;      //正跳变写入指令   
   i_data=i_data<<1;   //左移一位   
}   
/*-----------------------------------------*/      
CS=0;         //把片选置低   
delay1ms(5);       //延时是因为没有进行忙检测,适当的延时可以不进行忙检测   
}   
/*-----------------------------------------*/

/*------------写数据到LCD12864-------------*/
void write_dat(uchar dat)   
{   
uchar i;   
uchar i_data;   
i_data=0xfa;   
CS=1;   
for(i=0;i<8;i++)   
{   
   SID=(bit)(i_data&0x80);   
   SCLK=0;   
   SCLK=1;   
   i_data=i_data<<1;   
}   

i_data=dat;   
i_data=i_data&0xf0;   
for(i=0;i<8;i++)   
{   
   
   SID=(bit)(i_data&0x80);   
   SCLK=0;   
   SCLK=1;   
   i_data=i_data<<1;   
}   

i_data=dat;   
i_data=i_data<<4;   
for(i=0;i<8;i++)   
{   
   
   SID=(bit)(i_data&0x80);   
   SCLK=0;   
   SCLK=1;   
   i_data=i_data<<1;   
}   
CS=0;   
delay1ms(5);   
}   
/*-----------------------------------------*/

/*--------------显示坐标-------------------*/
void lcd_pos(uchar x,uchar y)      //汉字显示坐标,x为哪一行,y为哪一列   
{   
uchar pos;   
if(x==0)   
   x=0x80;         //第一行   
else if(x==1)   
   x=0x90;         //第二行   
else if(x==2)   
   x=0x88;         //第三行   
else if(x==3)   
   x=0x98;         //第四行   
pos=x+y;         //显示哪一行(总共有4行)哪一竖(总共有8竖,每16列为1竖)   
write_cmd(pos);   
}   
/*-----------------------------------------*/

/*--------------显示8个汉字-------------------*/
void disp_hanzi(uchar code *chn)   
{   
   uchar i;   
   write_cmd(0x30);    //基本指令操作方式   
   for(i=0;i<16;i++)   //16列*8个汉字=128(刚好)   
       write_dat(chn);   
}   
/*-----------------------------------------*/

/*--------------显示数字-------------------*/
void disp_num(uchar code *chn)   
{   
uchar i;   
   write_cmd(0x30);    //基本指令操作方式   
   for(i=0;i<2;i++)      //1个数字   
       write_dat(chn);   
}   
void disp_number(uchar num)   
{   
      
   switch(num)   
   {   
case 0: disp_num(num0);break;   
case 1: disp_num(num1);break;   
case 2: disp_num(num2);break;   
case 3: disp_num(num3);break;   
case 4: disp_num(num4);break;   
case 5: disp_num(num5);break;   
   case 6: disp_num(num6);break;   
case 7: disp_num(num7);break;   
case 8: disp_num(num8);break;   
case 9: disp_num(num9);break;   
default: break;   
   }   

}   
/*----------- --LCD初始化------------------*/
void lcd_init()   
{   
PSB=0;   
write_cmd(0x30);       //基本指令   
write_cmd(0x02);       //地址归位   
write_cmd(0x06);       //游标右移   
write_cmd(0x0c);       //整体显示   
write_cmd(0x01);       //清屏   
}   
/*-----------------------------------------*/
void displayP10()   
{   
float ad1;   
//unsigned int temp1,sh1,ge1,n1,m1;   
//uchar code dis2[]={0x01,0x02,0x00};   

//ad1=x*7.8125;   //电压修正   
uchar i;   
ad1=Vin*3.9608;   //具体线性参数由输入电压值调整,该值的测量范围为0-10.00V,5V左右的测量比较准确,   
                      //两端的最大误差为70mv,其他一般在40mv以内   

temp1=(int)ad1;   
sh1=temp1/1000;    //十位   
ge1=(temp1%1000)/100;   //个位   
n1=((temp1%1000)%100)/10; //小数点后一位   
m1=((temp1%1000)%100)%10; //小数点后二位   
//write_cmd(0x01);   
write_cmd(0x30);    //基本指令操作方式   

lcd_pos(0,0);   
   for(i=0;i<6;i++)      write_dat(ma1);   
         
lcd_pos(0,3);   
disp_number(sh1);   
lcd_pos(0,4);   
disp_number(ge1);   
lcd_pos(0,5);   
for(i=0;i<2;i++)    write_dat(ma2);   
lcd_pos(0,6);   
disp_number(n1);   
lcd_pos(0,7);   
disp_number(m1);   

/*lcd_pos(2,0);
disp_hanzi(disp1);
lcd_pos(3,0);
disp_hanzi(disp2);*/
}   
void main()   
{   
   EA=1;   
AD_initiate();   //初始化   
ADC_Power_On();   //开AD电源   
//init();   
lcd_init();   
delay(10);   
while(1)   
{   
      
   caiyangP10();    //测电压   
   send_ad_result();   
   //Vin=Vin*4007;   
   displayP10();   
   delay(10);   
}   
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/djimon/archive/2010/08/29/5848284.aspx

bg8wj 发表于 2010-10-24 21:05:22

ok,最终老y的stc12c560s2 通过。还是不错的。毕竟比我以前用的77e58 89s52实现作品要便宜的多。
嘿嘿,在上两张pp,猜猜显示成这样是这么弄的?幻影显示。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592506INCJHI.jpg
(原文件名:101024A000.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_592507RYEZ7J.jpg
(原文件名:101024A002.jpg)

最后还是和老y撇清关系,我不是老y的马甲,fns。就是冲着老y的东东便宜去的。不知道老y能否搞出stc stc-telin 808x986 四核睿库,9.9元/片。那我等就能笑的死去活来了。

skynet 发表于 2010-10-24 21:21:33

实话实说,老妖怪的东西就是便宜实惠,而且从来没有缺货的问题.只是他的那个数据手册可谓全球首创了,第一次看到差点吐血,还以为下载错了,还有那个网站,实在是汗,不仔细看还以为是木马网站
不过好像现在最新的12系列的数据手册改正收敛了1点,前几天下载了看看,好像在众怒之下改正了,貌似没有那么多广告了

skynet 发表于 2010-10-24 21:27:07

噢,搞错,是最新15系列那个中文手册,收敛了很多了

litteworm 发表于 2010-10-24 22:52:02

不错····

wajlh 发表于 2010-10-24 22:58:01

回复【9楼】litteworm
-----------------------------------------------------------------------
你店里那个USB吸尘器是否适合于阿莫雕刻机吸尘?

jrcsh 发表于 2010-10-24 23:59:57

1602还在乱飞中弟一行正常 弟2行见鬼去了

XMLK 发表于 2010-10-25 00:50:04

回复【8楼】skynet 青青草原
噢,搞错,是最新15系列那个中文手册,收敛了很多了
-----------------------------------------------------------------------

专门去看了下,感觉会好点

eyue 发表于 2010-10-25 07:17:27

希望从15系列开始,数据手册会慢慢正规

XA144F 发表于 2010-10-25 09:11:07

STC单片机中ADC的参考电压是从哪里来的?好像是VCC吧,就这点不靠谱。

bg8wj 发表于 2010-10-25 12:31:02

回复【14楼】XA144F
-----------------------------------------------------------------------

参考电压的解决办法:连解两个方程
adc_reg1=1024*Vin/Vcc P1.0输入
adc_reg2=1024*Vtl431_ref/Vcc P1.1输入
getadc(P1.0adc,P1.1adc) 当然这个不是实时的至少有10个t的延时。

tangwei039 发表于 2010-10-25 13:10:17

mark

undeadhuman 发表于 2010-10-25 13:41:38

感谢5楼!

我马上也要做一个STC12C5A60S系列的单片机的开发板!这次打算选用的型号为STC12C5A08S2,呵呵。到时候可以参考上面的5楼代码了。

选用此芯片也是因为这个呆AD的缘故。呵呵。

oufuqiang 发表于 2010-10-25 14:12:34

   原来用STC12C5A60S2做重量采集,飘得厉害,能飘近10个字。用示波器看VCC波形和ADC输入波形很稳定,一点问题都没有,可是就是乱飘,后来用50次采集求平均值都没有用,真是见鬼了。
<font color=red>    后来给应变桥的铝体接地,不漂了,稳定在1-2个字。郁闷死。

bj-stm8 发表于 2010-10-25 16:36:52

ding

jrcsh 发表于 2010-10-25 21:47:07

回复【18楼】oufuqiang 欧福强
   原来用stc12c5a60s2做重量采集,飘得厉害,能飘近10个字。用示波器看vcc波形和adc输入波形很稳定,一点问题都没有,可是就是乱飘,后来用50次采集求平均值都没有用,真是见鬼了。
<font color=red>    后来给应变桥的铝体接地,不漂了,稳定在1-2个字。郁闷死。</font>
-----------------------------------------------------------------------



我的无地方接地用的是 LM35~~~~ 飘阿飘   24~27 度飘阿飘

XA144F 发表于 2010-10-25 22:19:33

我用的Atmega32,内部参考电压2.57V,也是测量LM35,使用16点平滑滤波,根本不跳动了,哈哈。

bg8wj 发表于 2010-10-25 23:06:58

回复【20楼】jrcsh邪恶的小会会
-----------------------------------------------------------------------

程序中添加中位值平均滤波啊,可以防脉冲干扰。50次采集求平均值是算数均值滤波法。
附:算数均值滤波法优点:这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。注意是某一数值上下波动。
以你的数值乱跳来看是脉冲干扰。数字采样必须用滤波函数处理,否则嘿嘿。我试过传说中的10中滤波方法,对于stc的adc能够兼顾速度程序空间的话最好的就是中值平均法。

eliuxiao 发表于 2010-10-29 23:11:21

为什么“北纬”的“北”容易闪成“61‘

zhxzhx 发表于 2010-11-1 21:38:46

后面的数字太长了,LCD的显示自动回绕了

bg8wj 发表于 2010-11-2 01:10:01

继续测试stc12c5a60s2的ad,对于老y的stc12c5a60s2单片机,再次尝试ad,pwm,timer0,timer1,uart1,uart2,键盘扫描同时使用到。总结:
1、发现ad采样数值漂的问题,确实存在(前提是使用线性电源),不过加在调用滤波函数后,非常稳定,在此与各位分享心得。首先stc的pz,因为ad用的是单片机的vcc 所以必须在电源上选择硬件滤波,我用安泰信的可调线性电源调试时滤波函数,N取12时还是飘,同样的电路用IBM 1u机箱上拆下的atx电源供电后,测试电源的3.3v输出组,滤波函数调用和不调用AD的输出值是一样的,非常稳定。同样在ad取样上切换引脚的话一样的需要等待几个时钟周期,才能稳定。
2、所谓的stc的单片机不能接液晶的问题也发现了,在显示时会出现偶尔会出现乱码。估计是stc片子内部存储器为了和51的兼容,因此在使用idata时,必须考虑到堆栈地址的问题,这个在新版的谣言中提到,顺便说下,新版谣言没有恶心的广告了,而且居然也学会在pdf中加水印了。
3、stc作为超频的51,在运算速度上确实快了不少。这点在滤波函数上体现出来,对比过传说的avr和stc跑同样的滤波函数耗时基本一样。4、对比编译器的效率,keil4的比avr的所有编译器效率高,也就是说同样的C函数对于avr的icc也好gcc也好,编译后执行效率反而低于传统的51片子。当然除非使用汇编的话,avr的高速才能体现出来。
题外话:是谁说的avr的引脚厉害,接高电压没有问题。我的atmega16L就是测量一个6v左右的脉冲挂了。mmd。损失12块啊。以后谁在说avr的引脚可以直接测量高于vcc的信号,就赔我一片atmega16.
封贴。。。。。。。 我还是要继续玩我的超频c300a,哦是超频51cpu。

devcang 发表于 2010-11-2 09:27:59

顶一个,作个记号先

flyhouse 发表于 2010-11-2 10:14:57

只说:可用。

wjsh0826 发表于 2011-1-27 18:19:09

标记啦...

cuikai12345 发表于 2011-1-27 19:15:34

mark

wanglituan 发表于 2011-1-28 17:33:00

看来还是要先把电源部分做好吧,不知道大家用什么IC稳压效果比较好呢?

poet_lee 发表于 2011-1-28 18:09:37

mark学习了~

jrcsh 发表于 2011-1-28 18:54:48

回复【22楼】bg8wj
回复【20楼】jrcsh邪恶的小会会
-----------------------------------------------------------------------
程序中添加中位值平均滤波啊,可以防脉冲干扰。50次采集求平均值是算数均值滤波法。
附:算数均值滤波法优点:这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。注意是某一数值上下波动。
以你的数值乱跳来看是脉冲干扰。数字采样必须用滤波函数处理,否则嘿嘿。我试过传说中的10中滤波方法,对于stc的adc能够兼顾速度程序空间的话最好的就是中值平均法。
-----------------------------------------------------------------------

我用了上次数据进行压制   代价就是灵敏度下降

danceman_uk 发表于 2011-3-4 17:40:37

先MARK了.THX!

cc6868 发表于 2011-3-4 18:21:18

太好了,终于看到一个同路人了~~

danceman_uk 发表于 2011-3-9 20:55:22

收藏!

411412 发表于 2011-3-9 21:36:56

mark

lixupeng 发表于 2011-3-15 19:35:07

mark!!!

ohmytime 发表于 2011-3-21 23:48:52

很好的经验!不过注意keil有个oxfd的bug
别歪打正着以为是stc不能接液晶了!

LM1876 发表于 2011-3-22 08:39:38

记录

windboy 发表于 2011-3-22 09:08:05

mark

pulan 发表于 2011-3-22 09:22:15

mark

nbc327 发表于 2011-3-24 20:23:19

看看!

hanfeng000 发表于 2011-3-25 22:19:36

不错 还带GPS呢

lantian0099 发表于 2011-4-8 01:00:40

mark

ccmj4708 发表于 2011-4-8 08:16:04

mark

oufuqiang 发表于 2011-4-8 10:29:30

0xfd,曠ision,绝对是keil的标志……

chishangpiao 发表于 2011-4-8 11:00:46

路过

taotaoliu 发表于 2011-4-8 12:49:19

看了一下,现在STC芯片也可能缺货了

duzhang 发表于 2011-4-8 13:22:29

话说STC的单片机其实很好用的。

ldj7501 发表于 2011-4-8 13:35:44

mark

soulja 发表于 2011-7-17 12:37:56

刚好想用这个片子 做温控看着大家说的 我都不敢用了

haolaishi 发表于 2011-8-4 18:29:01

mark

liuxiu 发表于 2011-8-4 21:12:08

请教一下!有没有带ad的一些stc89系列的51或52

3050311118 发表于 2011-8-5 21:56:30

MARK

lzbpli 发表于 2011-8-18 15:23:00

mark

xulong20006 发表于 2011-8-20 19:01:00

mark

xuming07 发表于 2011-8-25 15:02:25

好东西,挺下

mavericklx 发表于 2011-8-25 15:43:57

mark~

bingshuihuo888 发表于 2011-8-25 16:52:32

mark~

xofun 发表于 2011-9-22 22:30:33

不错

a305566 发表于 2011-9-22 22:37:46

mark

389281541 发表于 2011-9-23 15:09:16

强悍

ljt499 发表于 2011-9-24 23:53:11

强大呀,学习了

zhaohongxian 发表于 2011-10-3 06:56:01

学习学习

hl646398140 发表于 2011-10-27 21:48:31

mark

Pony279 发表于 2011-10-27 23:44:51

MARK

edaworld 发表于 2011-10-28 02:38:47

马甲

caoweidong 发表于 2011-10-28 10:09:58

不错 我也在学习中!

xiaoyigechaos 发表于 2011-10-29 23:13:58

我浪费了好多原件啊,学习了

cqxubo01 发表于 2011-10-30 09:54:44

mark一下

liuying 发表于 2011-10-31 02:30:08

顶一下

kkey 发表于 2011-11-1 00:50:46

学习学习

lcmdw 发表于 2011-11-1 09:05:30

mark

wpnx 发表于 2011-11-1 09:46:13

MARK

jyjmaster 发表于 2011-11-1 10:06:36

mark

BG6QGS 发表于 2011-11-8 20:45:50

HAMDING

senzh01 发表于 2011-11-8 22:28:20

标记一下,明天再看!!

xsmjc98 发表于 2011-11-8 22:47:26

STC AD 12864液晶测试~

redwolf310 发表于 2011-11-11 10:06:51

mark

wxl901108 发表于 2011-12-2 21:46:35

顶你一下!!!!!!!

xuliz 发表于 2011-12-6 13:58:19

收藏,谢谢分享

jqfsjt 发表于 2012-1-24 08:58:53

MARK

nihao_x 发表于 2012-2-2 16:38:09

各有各的特点!!

master863 发表于 2012-2-20 01:50:24

mark

ycwjl728 发表于 2012-2-20 08:54:33

Mark!

wajlh 发表于 2012-2-20 23:57:41

刚用这个片子做了数据采集,采样出来的电压值偏高一点

leinfly 发表于 2012-2-21 02:00:28

标记,感谢分享

pulan 发表于 2012-2-21 07:17:03

玛瑞k

yangjl2010 发表于 2012-2-21 11:25:12

STC一直在用,还算稳定

WHATCHING 发表于 2012-2-21 23:28:38

不懂。。还虽学习

79301110 发表于 2012-2-26 19:50:45

STC AD 12864液晶测试我正需要用到。

lcmdw 发表于 2012-2-26 20:46:33

mark

feeson 发表于 2012-2-26 21:51:40

在产品要求不高和要求成本低的情况下还是可以选用STC的,大家别一棍子打死老妖的所有芯片,毕竟是自己家门的产品。

sszzeettee 发表于 2012-2-27 15:50:57

我们一直是用STC的单片机做项目

a312835782 发表于 2012-2-29 19:39:28

mark

flame0510 发表于 2012-3-5 19:12:56

mark

farrtone 发表于 2012-3-5 22:02:25

LCD12864

cbailjc 发表于 2012-3-5 22:02:38

说真的,我们产品用的就是stc,没什么不一样,

beck_ck 发表于 2012-3-5 22:20:51

回复【楼主位】bg8wj
-----------------------------------------------------------------------

mk
页: [1] 2
查看完整版本: STC12c5a60s2 AD+12864液晶驱动 有图有真相