stc15f204ea引脚 突然写不进程序了,是芯片坏了吗

单片机STC15F204EA DIP28,,怎么不起振了?程序不运行了?_百度知道
单片机STC15F204EA DIP28,,怎么不起振了?程序不运行了?
  单片机STC15F204EA DIP28不起振,程序不运行的原因以及解决方法:  1:有可能是在下载的时候选择了外部晶体下载,单片机在启动后直接切换至外部晶体,而外部又没有可靠的晶体,造成无法工作,先尝试下连接一个外部晶振,能烧写后再改回使用内部晶振;  2:检查一下电源电压,STC15F204EA系列工作电压5.5V - 3.8V,STC15L204EA系列工作电压3.6V - 2.4V,仔细看下到底是F还是L,如果电压高了,证明芯片已损坏;  3:检查一下编程器的设置项,重新进行设置。  单片机简介:  单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
其他类似问题
为您推荐:
提问者采纳
将RST对地短接,下载时选内部复位试试
有问题补充了
应该是RST造成的,本身你的电路应该是内部复位,但不小心下载时选了外部复位,结果就成这样了,我也常遇到这样的问题,此时将RST对地短接再下载一次程序就可以修复了。
试了,没反应,可能就这样坏了,这款不靠谱啊!东西本身不贵,但邮费贵啊,可以买好几片了,哎~
干么要邮购,市场购买很便宜呀,2元左右吧
我们这边没有的,淘宝上买都要3.5-4元,难道这2片烧了几次就挂了,真不敢相信~感觉还是内部rc不振
提问者评价
谢谢你的耐心解答,好详细呀
来自团队:
如果电压高了,STCISP软件有时候不是很好用的,比这个好用,肯定工作不了。3,STC15L204EA系列工作电压3,先尝试下连接一个外部晶振,芯片肯定报废了.5V - 3.估计你下载的时候选择了外部晶体下载。2,网上有个叫单片机在线下载系统的工具.检查下电源电压.检查下编程器的设置项.6V - 2,STC15F204EA系列工作电压51.4V.8V,可以尝试下,仔细看下到底是F还是L,单片机在启动后直接切换至外部晶体,而你的外部又没有可靠的晶体,能烧写后再改回使用内部晶振
有问题补充了
来自团队:
您可能关注的推广
单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁电磁炉的CPU坏了,因写有原厂的程序,是不是没有同型号写有程序的芯片,这台机子就要报废了?_百度知道
电磁炉的CPU坏了,因写有原厂的程序,是不是没有同型号写有程序的芯片,这台机子就要报废了?
我有更好的答案
是的 除非厂家维修
好像现在很多空调,电磁炉都是各厂写各厂的程序,要是这些芯片坏了都没招了。
想修可以啊找售后
其他类似问题
为您推荐:
找借口的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁STC15F204EA做的电压表,另外请教一个问题|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
STC15F204EA电压表&& 过程很艰辛,图书馆跑了几次,例程看了好多,没人指点AD好难懂,终于有一天觉悟了,突然发现AD好像也不难然后电压表可以显示电压了电压基准用的是AM,电压不稳,无奈只有在其两端加了个电容让它电压跳变平滑点。所以电压表精度不是很高做完之后发现单片机用电池供电,电压一点也不跳,用电脑USB供电时,数码管后两位隔几秒就跳一下结果还算满意,程序很烂,电路板反面焊的有点丑,不曝光了做的电压表和买的电压表对比了下 误差在0.1V以内,勉强算个电压表,唯一遗憾的就是没有买高精度电压基准芯片另外请教一下大神:ADC转换结果我用的是高8位,如何用上ADC转换结果的低2位,ADC_RES和ADC_RESL如何计算才能得到10位转换结果。。。。[attachment=2477946][attachment=2477947][attachment=2477949][attachment=2477950][attachment=2477951][attachment=2477952]#include&stc15f204ea.h&#include&intrins.h&#define&&&&ADC_POWER&&&&&& 0x80&&&&&&&&&&&&&&&&&&//ADC 电源控制位#define&&&&ADC_FLAG&&&&&&&&0x10&&&&&&&&&&&&&&&&&&//ADC 完成标志#define&&&&ADC_START&&&&&& 0x08&&&&&&&&&&&&&&&&&&//ADC 启动控制位#define&&&&ADC_speed_LL&&&&0x00&&&&&&&&&&&&&&&&&&//540 时钟#define&&&&ADC_speed_L&&&& 0x20&&&&&&&&&&&&&&&&&&//360 时钟#define&&&&ADC_speed_H&&&& 0x40&&&&&&&&&&&&&&&&&&//180 时钟#define&&&&ADC_speed_HH&&&&0x60&&&&&&&&&&&&&&&&&&// 90 时钟typedef unsigned long&&void delay(unsigned int x);&&&&&&&&&&&&//函数声明void LCD(unsigned int LedNumVal);&&&&&& //函数声明void Delay1ms();&&&&&&&&&&&&&&&&&&&&&& //函数声明void Delay150us();&&&&&&&&&&&&&&&&&&&&&& //函数声明void AD_Init();&&&&&&&&&&&&&&&&&&&&&&&&&& //函数声明uint ADC(uint m);&&&&&&&&&&&&&&&&&&&&&& //函数声明void Delay350us();&&&&&&&&&&&&&&&&&&&&&& //函数声明void Delay20ms();&&&&&&&&&&&&&&&&&&&&&& //函数声明unsigned char code&& Disp_Tab[] = {0xd7,0x14,0xcd,0x5d,0x1e,0x5b,0xdb,0x15,0xdf,0x5f,0xd7};&&//&&数组&& 0-9
unsigned char code&& dispbit[4]={0x07,0x0b,0x0d,0x0e};&&&&//位选控制 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/************主函数**********************/ void main(){uint Vcc,Int,V,Int_S, Vcc_S;unsigned char m,M;P3M1=0x00;P3M0=0&&&&&&&&&&&&&&&&&&//设置P3口强推挽输出AD_Init();&&&&&&&&&&&&&&&& //AD初始化Delay1ms();&&&&&&&&&&&&&&&& //开始采样电压前延时,电路有几个电容充电未完成前会拉低部分元器件电压(导致采样电压不准),目测须延时1S,懒得改程序了&&&&while(1){&&&&&&&&&&&&&&&&&&&&Delay20ms();&&&&Int_S=0;&&&&Vcc_S=0;&&&&m=0;&&&&&&&&&&&&for(m;m&24;m++)&&&&{&&&&&&&&&&&&&&&&Delay350us();&&&&&&&& //采样电压时差&&&&&&&&Int_S += ADC(4);&&&&&&&&Vcc_S += ADC(5);&&&&&&&&&&&&Int = Int_S/24;&&&&&&&&Vcc = Vcc_S/24;&&&&&&&&//采样24次电压求平均值&&&&&&&&&&&&}&&&&M=20*Int/V&&&&if(M&16) V=19150*Int/V&&&&else if(M&11) V=19100*Int/V&&&&&&&& //大于11V电压转换公式&&&&else if(M&10) V=19150*Int/V&&&&&&&& //10V-11V&&&&else if(M&5) V=19200*Int/V&&&&&&&& //5V-10V&&&&else if(M&3) V=19350*Int/V&&&&&&&& //3V-5V&&&&else if(M&1) V=19550*Int/V&&&&&&&& //1V-3V&&&&else if(M&=0) V=20000*Int/V&&&&&&&& //0-1V&&&&&&&&&&&&&&&& 各量程精度调整&&&&&&&&LCD(V);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//电压显示&&&& }&&&& }&&&&&&&& /*******数码管显示函数*************/void LCD(unsigned int LedNumVal){&&&& unsigned int LedOut[4];&&&&&&&&&& //变量定义&&&&&& &&&&&&&&&&&&if(LedNumVal&9999)&&&&{&&&& LedOut[0]=Disp_Tab[LedNumVal%00];&&&&&&&&&&&&// 千位&&&&&&&&&& &&&& LedOut[1]=Disp_Tab[LedNumVal%]|0x20;&&&&&&&&&&&&&&&&// 百位&&&&&&&& LedOut[2]=Disp_Tab[LedNumVal%];&&&&&&&&&&&&&&&&// 十位&&&& LedOut[3]=Disp_Tab[LedNumVal%100/10];&&&&&&&&&&&&&&&&&&&&// 个位&&&&}&&&& if(LedNumVal&10000)&&&&&&&&{&&&&&&&&&&&& LedOut[0]=Disp_Tab[LedNumVal%]|0x20;&&&&&&&&&&&&// 千位&&&&&&&&&& &&&& LedOut[1]=Disp_Tab[LedNumVal%];&&&&&&&&&&&&&&&&&& // 百位&&&&&&&& LedOut[2]=Disp_Tab[LedNumVal%100/10];&&&&&&&&&&&&&&&&&&&&// 十位&&&& LedOut[3]=Disp_Tab[LedNumVal%10];&&&&&&&&&&&&&&&&&&&&&&&&// 个位&&&&&&&&&&&&&&&&&&&& if语句 实现 小数点自动切换&&&&&&&&}&&&&&&&&&&&&P3=LedOut[3];&&&&P10=0;&&&&delay(700);&&&&P10=1;&&&&&&&&&&&&P3=LedOut[2];&&&&P11=0;&&&&delay(700);&&&&P11=1;&&&&&&&&P3=LedOut[1];&&&&P12=0;&&&&delay(700);&&&&P12=1;&&&&&&&&P3=LedOut[0];&&&&P13=0;&&&&delay(700);&&&&P13=1;&&&&&&&&delay(700);&&&&&&&&&& //&&数码管消隐&&&&&&&&&&&&&&&&&&&& &&&& &&}&& /***********AD初始化***************/void AD_Init(){P1M1=0x30;P1M0=0x00;&&&&&&&&&&&&&&&& //设置P1.4\P1.5高阻ADC_RES=0x00;P1ASF=0x30;ADC_CONTR=ADC_POWER|ADC_speed_LL;Delay1ms();&&&&}/*********电压采样*********/uint ADC(uint m){&&&&&&&&if(m==4)&&&&{&&&&&&&&ADC_CONTR &=0xf8;&&&&//清空通道&&&&&&&&ADC_CONTR |=0x04;&&&& //更换通道&&&&&&&&Delay150us();&&&&&&&& //更换通道延时&&&&}&&&&&&&&if(m==5)&&&&{&&&&&&&&ADC_CONTR &=0xf8;&&&&&&&&ADC_CONTR |=0x05;&&&&&&&&Delay150us();&&&&}&&&&&&&&ADC_CONTR |=ADC_START;&&&&//开启AD转换&&&&_nop_();&&&&_nop_(); &&&&_nop_(); &&&&_nop_(); &&&&while(!(ADC_CONTR & 0x10));&&&&&&ADC_CONTR &= ~ADC_FLAG;&&&&return ADC_RES;&&&&&&&&&&&&&& //返回转换结果}/*******************延时函数**********/void delay(unsigned int x){&&&&&&&&for(x; x& 0; x--)&&&&&&&&for(j = 400; j & 0; j--);} void Delay1ms()&&&&&&&&//@12.000MHz{&&&&unsigned char i,&&&&i = 2;&&&&j = 239;&&&&do&&&&{&&&&&&&&while (--j);&&&&} while (--i);}void Delay150us()&&&&&&&&//@12.000MHz{&&&&unsigned char i,&&&&i = 2;&&&&j = 189;&&&&do&&&&{&&&&&&&&while (--j);&&&&} while (--i);}void Delay350us()&&&&&&&&//@12.000MHz{&&&&&&&&_nop_();&&&&i = 172;&&&&while (--i);}void Delay20ms()&&&&&&&&//@12.000MHz{&&&&unsigned char i,&&&&i = 39;&&&&j = 230;&&&&do&&&&{&&&&&&&&while (--j);&&&&} while (--i);}
赞助商链接
合成10位&&可以百度一下移位运算
赞助商链接
ADC_RES&&2;10位ADC结果=&&ADC_RES | ADC_RESL;是这样么,但对其原理不是很懂,直接移位对结果没影响么
c语言功底不错 程序结构还行
做基准当然差咯,基准你可以用TL431试试
TL431接成2.5V基准,绝对比1117好很多。。试试吧 也不贵
我也想做一个,求公布电路图
做这个没画图。。protel正在学习中。不好意思啊。其实数码管是I/O口直接驱动的,AD采样的电路 就接了1个电阻和一个PF电容(101) 单片机芯片资料上都有,你会AD和数码管的话做这个应该很简单。这个电压表主要为了学习AD做的,很烂!我现在正准备做个双4位数码管显示正负电压的电压表(用在我那个正负可调电源上)。下次争取画个图出来!
其实我很菜的,只是不懂得就查资料
都会AD了啊,我基本的IO操作还没摸透呢!~~
能摸索出ad的使用方法不简单。
楼主还是画个图吧,程序结合图才容易看懂
我买了很多这个片子,正不知何用呢!果断抄一个先!
这是我后来整理的STC系列单片机做电压表的帖子
我还在找 stc15f204ea.h&& 汗一个
楼主,上面那个下载里没有 stc15f204ea.h
楼主小数点接到单片机哪个脚了?再有,在程序里没有看到基准电压先关的语句,怎么回事?
楼主量程是多少?输入分压值也没看到?
STC15.H就是的,基准电压自己加就可以了,一般TL431就可以了,分压就是两个电阻呗,还可以在分压后加个电压跟随器!
&& 你可以把高位左移两位在加低位的结果。或者高位乘以4再加低位也一样。
查看完整版本: [--
Powered by
Gzip enabledSTC15F204EA-芯片中文资料_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STC15F204EA-芯片中文资料
上传于||文档简介
&&S​T​C5​F0E​A​芯​片​资​料
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩363页未读,继续阅读
你可能喜欢后使用快捷导航没有帐号?
查看: 1789|回复: 21
关于STC15F204EA做的电压表!显示会闪烁怎么回事
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
各位大侠!你好!
我用STC15F204EA了一个电压表!当电压调节的时候,数码管跳得很快!跟本看不出数码管是怎么变化的!
当电位器停止时,数码管显示一切正常!就是在调节那个时候,数码管闪得很快(并非数字变化范围很大)
信号经过10K和5.6K电阻进行分压衰减,电压取自5.6K电阻和地之间!
程序如下,望各位大侠帮帮忙看看!到底什么原因!
在这谢过了!#include&STC15F204EA.h&
#include&intrins.h&
#define GPIO_DIG P3
#define Fosc
/*宏定义设置ADC转换控制寄存器*/
#define ADC_POWER 0x80/*打开ADC电源*/
#define ADC_FLAG 0x10 /*ADC中断标志*/
#define ADC_START 0x08/*开启数模转换*/
#define ADC_SPEED 0x00/*ADC转换速度540时钟周期转换1次*/
#define ADC_CH 0x04/*ADC转换5通道*/
sbit CS1=P1^6;
sbit Beep=P1^7;
sbit G=P1^1;
sbit C=P1^0;
sbit CS2=P3^1;
sbit CS3=P3^0;
unsigned char code DIG[10]={0x7f,0x07,0x77,0x57,0x0f,0x5b,0x7b,0x17,0x7f,0x5f};
/*0~9的段码表*/
unsigned char T
unsigned int Vout,cout,S
void Inittop();/*板子初始化*/
void InitADC();/*ADC初始化*/
void display(unsigned int b);
void display1(unsigned char a);
void Delay2ms();& & & & & & & & //@12.000MHz
void Delay100us();& & & & & & & & //@12.000MHz
& & & & unsigned int Num=980;
& & Inittop();/*板子初始化*/
& & InitADC();/*ADC初始化*/
& & & & TMOD=0x00;/*设定定时器0工作模式为0*/
& & & & AUXR=0x00;/*设定定时器0工作在12T模式*/
& & & & TH0=(65536-Fosc/12/20)&&8;/*给定时器0赋初值,定时5ms*/
& & & & TL0=(65536-Fosc/12/20);
& & & & ET0=1;/*开定时器0中断允许*/
& & & & TR0=1;
& & & & EA=1;/*打开总中断*/
& & & & while(1)
& & & & {& & & &
& && &&&display(Vout);
void Timr0() interrupt 1
& & & & Time++;
void display(unsigned int b)
& & unsigned char bit100,bit10,bit1;
& & & & & & & & a=b;
& & & & & & & & bit100=a%;/*提取百位*/
& & & & & & & & a=a%100;
& & & & & & & & bit10=a/10;/*提取十位*/
& & & & & & & & bit1=a%10;/*提取个位*/
& && &&&if(b&100)/*当转换的电压值大于10V时,显示三位数*/
& & & & & & & & & & /*送出数字段码*/
& & & & & & & & & & P3=DIG[bit100];
& & & & & & & & & & display1(bit100);
& & & & & & & & & & CS1=0; /*打开第一个数码的位选*/
& & & & & && &&&Delay2ms();
& & & & & & & & & & CS1=1;
& & & & & & & & & & /*送出数字段码*/
& & & & & & & & & & P3=DIG[bit10]|0x80;
& & & & & & & & & & display1(bit10);
& & & & & & & & & & CS2=0;/*打开第二个数码的位选*/
& & & & & && &&&Delay2ms();
& & & & & & & & & & /*送出数字段码*/
& & & & & & & & & & P3=DIG[bit1];
& & & & & & & & & & display1(bit1);
& & & & & & & & & & CS3=0;/*打开第三个数码的位选*/
& & & & & && &&&Delay2ms();
& && &&&else/*当转换的电压值小于10V时,显示二位数*/
& & & & & & & & & & /*送出数字段码*/
& & & & & & & & & & P3=DIG[bit10]|0x80;
& & & & & & & & & & display1(bit10);
& & & & & & & & & & CS2=0;/*打开第二个数码的位选*/
& & & & & && &&&Delay2ms();
& & & & & & & & & & /*送出数字段码*/
& & & & & & & & & & P3=DIG[bit1];
& & & & & & & & & & display1(bit1);
& & & & & & & & & & CS3=0;/*打开第三个数码的位选*/
& & & & & && &&&Delay2ms();& && &&&
}& & & & & & & & & & & &
void display1(unsigned char a)
& & & & switch(a)
& & & & & & & & case 0:G=0;C=1;/*数字0的数码管g,c段码*/
& & & & & & & & case 1:G=0;C=1;/*数字1的数码管g,c段码*/
& & & & & & & & case 2:G=1;C=0;/*数字2的数码管g,c段码*/
& & & & & & & & case 3:G=1;C=1;/*数字3的数码管g,c段码*/
& & & & & & & & case 4:G=1;C=1;/*数字4的数码管g,c段码*/
& & & & & & & & case 5:G=1;C=1;/*数字5的数码管g,c段码*/
& & & & & & & & case 6:G=1;C=1;/*数字6的数码管g,c段码*/
& & & & & & & & case 7:G=0;C=1;/*数字7的数码管g,c段码*/
& & & & & & & & case 8:G=1;C=1;/*数字8的数码管g,c段码*/
& & & & & & & & case 9:G=1;C=1;/*数字9的数码管g,c段码*/
void Inittop()/*板子初始化*/
& & & & Beep=0; /*关闭蜂鸣器*/
& & & & P1M0=0XFF;& & & &
& & & & P1M1=0;/*设置P1口为推挽输出*/
& & & & P3M0=0XFf;& & & &
& & & & P3M1=0;& & & & /*设置P3口为推挽输出*/
/*数码管显示8维持一秒钟*/
& & & & for(n=0;n&160;n++)
& & & & & & & & CS1=0;
& & & & & & & & Delay2ms();
& & & & & & & & CS1=1;
& & & & & & & & CS2=0;
& & & & & & & & Delay2ms();
& & & & & & & & CS2=1;
& & & & & & & & CS3=0;
& & & & & & & & Delay2ms();
& & & & & & & & CS3=1;
void InitADC()/*ADC初始化*/
& & P1ASF=0x10;/*设置P1.4口为数模转换口*/
& & ADC_RES=0;
& & ADC_RESL=0;& && && && && && && && && && && && && && && && &
& & ADC_CONTR=ADC_POWER|ADC_SPEED|ADC_CH;/*打开 ADC电源,选择转换速度和通道选择*/
& & Delay2ms();
& & ADC_CONTR|=ADC_START;/*开启ADC转换开关开始转换*/
& & EADC=1;/*允许ADC中断*/
& & EA=1;/*打开总中断*/
void ADC_Route() interrupt 5
& & unsigned int VH,VL,V;
& & ADC_CONTR&=!ADC_FLAG;/*清除中断标志*/
& & VH=ADC_RES;
& & VL=ADC_RESL;
& & V=(VH&&2)|VL;/*ADC寄存器转换结果整合成10位ADC*/
& & ADC_CONTR=ADC_POWER|ADC_SPEED|ADC_CH|ADC_START;/*转换结束后ADC_START会置0,要重新开启*/
& & if(cout&99)/*取V的值99次求和*/
& && &&&Sum+=V;
& && &&&cout++;
& & else if(cout==99)
& && &&&Sum+=V;/*取V的值100次求和*/
& && &&&Sum=Sum/100;/*取V的值100次求和取平均值*/
& && &&&value=20*Sum*0.004882;/*ADC转换分辨率为0.004882*/
& && &&&Vout=10*/*保留一位小数点*/
& && &&&cout=0;
& && &&&Delay100us();& & & & & & & & //@12.000MHz
void Delay2ms()& & & & & & & & //@12.000MHz
& & & & unsigned char i,
& & & & i = 24;
& & & & j = 85;
& & & & do
& & & & & & & & while (--j);
& & & & } while (--i);
void Delay100us()& & & & & & & & //@12.000MHz
& & & & unsigned char i,
& & & & i = 2;
& & & & j = 39;
& & & & do
& & & & & & & & while (--j);
& & & & } while (--i);
在线时间1328 小时
威望40182 分
芯币47470 枚
E金币749 枚
TA的帖子TA的资源
注意显示刷新周期,内容变化率可不能过大。
上传了一些书籍资料,也许有你想要的:
在线时间1210 小时
威望1330 分
芯币15401 枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1330, 距离下一级还需 670 积分
纯净的硅(高级), 积分 1330, 距离下一级还需 670 积分
没仔细看代码
注意显示变化的触发条件
So what......
在线时间114 小时
芯币129 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 86, 距离下一级还需 114 积分
一粒金砂(中级), 积分 86, 距离下一级还需 114 积分
这个程序,在CPU利用率比较低,特别是数码管显示
在线时间470 小时
威望120 分
TA的帖子TA的资源
一粒金砂(中级), 积分 120, 距离下一级还需 80 积分
一粒金砂(中级), 积分 120, 距离下一级还需 80 积分
加个RC低通滤波器,同时,电阻上并个10UF的电解电容
在线时间1514 小时
威望2875 分
芯币26951 枚
E金币140 枚
TA的帖子TA的资源
数码管刷新时,注意要先清零,在显示新内容。防止数据变化时的视觉残留。
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
老朋友你好!又是大侠你来帮我好开心!但是我做的计数器程序不会有这个样子出现,变化的时候很清晰的?也是用的那个动态扫描函数,很正常啊!如下:#include&STC15F204EA.h&#include&intrins.h&#define GPIO_DIG P3#define Fosc sbit CS1=P1^6;sbit Beep=P1^7;sbit G=P1^1;sbit C=P1^0;sbit CS2=P3^1;sbit CS3=P3^0;unsigned char code DIG[10]={0x7f,0x07,0x77,0x57,0x0f,0x5b,0x7b,0x17,0x7f,0x5f};/*0~9的段码表*/unsigned char Tvoid display(unsigned int b);void display1(unsigned char a);void Delay6ms();& & & & & & & & //@12.000MHzmain(){& & & &&&& & & && & & & unsigned int Num=980;& & & & Beep=0;& & & & P1M0=0XFF;& & & & & & & & P1M1=0;/*设置P1口为推挽输出*/& & & & P3M0=0XFf;& & & & & & & & P3M1=0;& & & & /*设置P3口为推挽输出*/& & & & for(n=0;n&50;n++)& & & & {& & & & & & & & CS1=0;& & & & & & & & Delay6ms();& & & & & & & & CS1=1;& & & & & & & & & & & & CS2=0;& & & & & & & & Delay6ms();& & & & & & & & CS2=1;& & & & & & & & & & & & CS3=0;& & & & & & & & Delay6ms();& & & & & & & & CS3=1;& & & & }& & & & TMOD=0x00;/*设定定时器0工作模式为0*/& & & & AUXR=0x00;/*设定定时器0工作在12T模式*/& & & & TH0=(65536-Fosc/12/20)&&8;/*给定时器0赋初值,定时5ms*/& & & & TL0=(65536-Fosc/12/20);& & & & ET0=1;/*开定时器0中断允许*/& & & & TR0=1;& & & & EA=1;/*打开总中断*/& & & & while(1)& & & & {& & & & & & & & & & & & if(Time==20)/*一秒时间到了吗?*/& & & & & & & & {& & & & & & & & & & & & Num++;& & & & & & & & & & & & if(Num&999)Num=0;& & & & & & & & & & & & Time=0;& & & & & & & & }& && &&&display(Num);& & }}void Timr0() interrupt 1{& & & & Time++;}void display(unsigned int b){& & unsigned char bit100,bit10,bit1;& && & & & & & & & a=b;& & & & & & & & bit100=a/100;/*提取百位*/& & & & & & & & a=a%100;& & & & & & & & bit10=a/10;/*提取十位*/& & & & & & & & bit1=a%10;/*提取个位*/& & & & & & & & /*送出数字段码*/& & & & & & & & P3=DIG[bit100];& & & & & & & & display1(bit100);& & & & & & & & CS1=0; /*打开第一个数码的位选*/& & & && &&&Delay6ms();& & & & & & & & CS1=1;& & & & & & & & /*送出数字段码*/& & & & & & & & P3=DIG[bit10];& & & & & & & & display1(bit10);& & & & & & & & CS2=0;/*打开第二个数码的位选*/& & & && &&&Delay6ms();& & & & & & & & /*送出数字段码*/& & & & & & & & P3=DIG[bit1];& & & & & & & & display1(bit1);& & & & & & & & CS3=0;/*打开第三个数码的位选*/& & & && &&&Delay6ms();}& & & & & & & & & & & & void display1(unsigned char a){& & & & switch(a)& & & & {& & & & & & & & case 0:G=0;C=1;& & & & & & & & case 1:G=0;C=1;& & & & & & & & case 2:G=1;C=0;& & & & & & & & case 3:G=1;C=1;& & & & & & & & case 4:G=1;C=1;& & & & & & & & case 5:G=1;C=1;& & & & & & & & case 6:G=1;C=1;& & & & & & & & case 7:G=0;C=1;& & & & & & & & case 8:G=1;C=1;& & & & & & & & case 9:G=1;C=1;& & & & }}void Delay6ms()& & & & & & & & //@12.000MHz{& & & & unsigned char i,& & & & i = 71;& & & & j = 6;& & & & do& & & & {& & & & & & & & while (--j);& & & & } while (--i);}
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
电容有的和滤波器
是程序的问题,跟什么电容滤波无关。&
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
大侠!怎么说我知道短码段不在一个IO口、我是用别人板子然后自己写下程序,看下能否写出来
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
大侠,能否说具体点
在线时间1328 小时
威望40182 分
芯币47470 枚
E金币749 枚
TA的帖子TA的资源
是程序的问题,跟什么电容滤波无关。
上传了一些书籍资料,也许有你想要的:
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
大侠!能帮忙看看吗?在此先谢过了!、数码管显示部分我感觉不会有什么问题,因为我做动态显示的时候,做为一个计数器一秒加一显示是正常的
妳的时序出问题了,会跳快,表示数码管更新的时间变快了,跟正常时不一样&
在线时间47 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
妳的时序出问题了,会跳快,表示数码管更新的时间变快了,跟正常时不一样
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
显示时间的时候1秒自动加一的时候是好的啊!就是显示电压的时候调节起来好像看不数码管的笔画的增减,变化很快(也就是一个数变化到另一个数的时候没有停顿一样,变化很快)大侠!能否说集体点呢??在这里谢谢你了
在线时间596 小时
威望31733 分
芯币7484 枚
E金币50 枚
TA的帖子TA的资源
裸片初长成(高级), 积分 31733, 距离下一级还需 18267 积分
裸片初长成(高级), 积分 31733, 距离下一级还需 18267 积分
电位器的滑动噪声太大了,换一个好一些的电位器试试看。(云台牌的)实心电位器不错。
还不行的话弄个1百个字节的数组,做一个递推滤波程序,不但显示稳定了,还能多显示两位小数。例如100个相加后不除以100直接显示。
在线时间159 小时
芯币115 枚
E金币80 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 52, 距离下一级还需 148 积分
一粒金砂(中级), 积分 52, 距离下一级还需 148 积分
本帖最后由 ceozxy 于
23:26 编辑
像是AD数据处理的问题,你可以把数码管显示数据用一些固定的数,通过电位器控制AD数据的区间数据来控制固定数据的显示,测试一下数码管显示胡不会乱……
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
大侠!这个涕推程序怎么弄啊,没有弄过,能否贴个程序出来呢,在此谢过了?
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
大侠,不太明白你的意思
在线时间596 小时
威望31733 分
芯币7484 枚
E金币50 枚
TA的帖子TA的资源
裸片初长成(高级), 积分 31733, 距离下一级还需 18267 积分
裸片初长成(高级), 积分 31733, 距离下一级还需 18267 积分
回楼主:需要RAM足够大,例如还剩余100多个空余RAM。
for(i=0;i&99;i++)
& && && &buf[i]=buf[i+1];
buf[99]=AD;
for(i=0;i&100;i++)
& && && &total+=buf[i];
如果需要显示位数多,则直接将total显示即可(注意移动小数点的位置);若不需要显示位数多,则total/=100再显示,小数点在原来位置。
在线时间39 小时
威望142 分
芯币251 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
大侠!有点看不懂,我是初学者,大侠能否详细一点吗,最好给点注释在此谢谢你了
技术导师勋章
论坛威望大于30000或网友提名:坛子里公认的技术导师
Powered by
逛了这许久,何不进去瞧瞧?}

我要回帖

更多关于 stc15f204ea手册 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信