|
本帖最后由 沨の痕 于 2021-1-29 15:10 编辑
原帖子:https://www.mydigit.cn/forum.php?mod=viewthread&tid=27146
升压改sx1308,加均衡,做出后触发经常会出现自己复位或者会死机(数码管不亮没反应),断电重开才恢复,然后还是会死机,外接5V供电还是这样,stc5w041单机片
源码
- #include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器
- typedef unsigned int u16;//对数据类型进行声明定义
- typedef unsigned char u8;//对数据类型进行声明定义
- sbit P30=P1^0; //数码管第1位
- sbit P31=P1^1; //数码管第2位
- sbit k1=P1^6; //将单片机的P3.2端口定义为时间加
- sbit k2=P1^5; //将单片机的P3.3端口定义为时间减
- sbit k3=P1^7; //将单片机的P3.4端口定义为检测点焊笔
- sbit out=P1^4; //驱动脉冲输出
- //数码管真值表//
- u8 code LED_CODE[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //显示0~F的段码
- u16 Cntms1=0,Cntms2=0,num1,num2;ke;
- u8 num; //定时变量=毫秒
- void Delay(unsigned long int t)
- {
- while(--t);
-
- }
- /*===加按键检测===*/
- /*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
- bit skey0(void)
- {
- static unsigned char a = 0;
- if(k1 == 0) //如果检测到按键引脚有低电平,记数变量开始累加.
- {
- if(a < 50) //控制延时计数返0,因为当按键不松开时,j一直在累加
- a++; //CPU每检测到一次按键引脚为低电平0,j就累加1次.
- }
- else //如果按键没有按下或者按下后有高电平(抖动)j清0
- a = 0;
-
- if(a == 49) //如果变量j的值累加到49,说明按键已跨过抖动区.
- return 1; //返回1,说明已检测到按键有效值.
- else
- return 0; //返回0,说明没有检测到有效值.
- }
- /*===减按键检测===*/
- /*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
- bit skey1(void)
- {
- static unsigned char i = 0; //定义静态变量,用来记录延时用.
- if(k2 == 0) //如果检测到按键引脚有低电平,记数变量开始累加.
- {
- if(i < 50) //控制延时计数返0,因为当按键不松开时,i一直在累加.
- i++; //CPU每检测到一次按键引脚为低电平0,i就累加1次.
- }
- else //如果按键没有按下或者按下后有高电平(抖动)i清0
- i = 0;
-
- if(i == 49) //如果变量i的值累加到49,说明按键已跨过抖动区
- return 1; //返回1,说明已检测到按键有效值.
- else
- return 0; //返回0,说明没有检测到有效值.
- }
- bit skey2(void)
- {
- static unsigned int l = 0; //定义静态变量,用来记录延时用. unsigned long int
- if(k3 == 0) //如果检测到按键引脚有低电平,记数变量开始累加.
- {
- if(l <5000) //控制延时计数返0,因为当按键不松开时,i一直在累加
- l++; //CPU每检测到一次按键引脚为低电平0,i就累加1次.
- }
- else //如果按键没有按下或者按下后有高电平(抖动)i清0
- l = 0;
-
- if(l == 4999) //如果变量i的值累加到4999,说明点焊笔已经做好准备,可以焊接了.
- return 1; //返回1,说明已检测到按键有效值.
- else
- return 0; //返回0,说明没有检测到有效值.
- }
- /********************************
- 数码管动态显示程序
- ********************************/
- void display()
- {
- static u8 i=0;
-
-
-
- if(i==0)
- {
- P30=1;
- P31=0;
- P3=LED_CODE[num/10];
- for(ke = 0;ke <100;ke++); //延时一段时间
- P31=1;
- P3=0Xff;
-
- i=1;
-
- }
- else
- {
- P31=1;
- P30=0;
- P3=LED_CODE[num%10];
- for(ke = 0;ke <100;ke++); //延时一段时间
- P30=1;
- P3=0Xff; //消隐
-
- i=0;
-
- }
- }
- //主函数//
- void main()
- {
- bit m = 0,m1 = 0,m2=0; //声明一个位变量.用来存储按键状态.
- unsigned char i;
- out=1; //初始化输出端口
- num=40;//定时变量赋初值
-
-
- k1 = 1; //加按键输入端口电平置高
- k2 = 1; //减按键输入端口电平置高
- k3 = 1;
-
- while(1) //主循环
- {
-
- m = skey0(); //采集加按键
- m1 = skey1(); //采集减按键
- m2 = skey2(); //采集按键
- if(m == 1) //如果采集到加按键值.
- {
- if(num < 99)
- num++; //计数自增
- }
- if(m1 == 1) //如果采集到减按键值.
- {
- if(num >1)
- num--; //计数自减
- }
- if(m2 == 1)
- { for(i=0;i<2;i++) //加入 for循环,表明for循环大括号中的程序循环执行2次
- {
- out=0; //将P1.0口赋值 0,对外输出低电平
- Delay(num*50); //调用延时程序;更改延时数字可以更改延时长度;用于改变输出脉冲时间
- out=1; //将P1.0口赋值 1,对外输出高电平
- Delay(3000);
- }
- }
- display();//数码管动态显示
- }
- }
复制代码
已解决,解决方法为把2200uf电容直接焊在单机片输入脚
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|