标题: 自学了好长时间C51单片机还是懵懵懂懂,求指导下程序 硬件已经完成了 [打印本页]

作者: mcuhui    时间: 2022-10-18 19:45
标题: 自学了好长时间C51单片机还是懵懵懂懂,求指导下程序 硬件已经完成了
能力有限,自学了好长时间C51单片机还是懵懵懂懂,现在手头上有个DIY需要用到51程序。对于我来说难度很大但是对于高手来说是非常简单的。求助有没有大师能不能带着辅导写一下。硬件已经完成了。下面是程序需求。
MCU芯片型号:STC8G1K17-38I
封装:TSSOP-20
系统供电:+5V
烧录方式:串口ISP下载
系统程序要求:
开机自检:
1. 温度是否在60℃以下,如果温度在范围内;MCU正常开机且4颗LED跑马灯式依次全亮10秒后熄灭。如果温度超过设计60℃范围,MCU不能正常开机(两个按键状态锁定)且4颗LED连续闪烁30S后熄灭。
2. 检查BV电压:上电后BV电压<2.8V或大于4.6V系统不能正常工作(两个按键状态锁定);且LED1灯快闪10次熄灭;BV电压自检正常4颗LED跑马灯依次点亮10秒后对应BV值显示出该值下的电量显示,详见电量指示LED对应表。
系统工作:
短按SW2,系统能依照电量指示LED对应表输出LED1-LED4的点灯状态,控制端口为P3.3-P3.5;低电平有效;点亮LED时间为5S。
1. 短按SW1;P1.1端口能输出高电平;再次短按P1.1能输出低电平。
2. 长按SW1时长3S以上;P1.1输出高电平。长按SW1时长3S以上,P1.0端口输出低电平;
3. 系统工作后持续检测TEMP值,对应温度值达到60℃时,P3.7端口持续输出高电平打开FAN;直到系统检测TEMP值小于60℃时,P3.7端口持续输出低电平关断FAN。
4. 系统工作后持续检测BV值;当检测到BV值<3.0V时,LED1-LED2连续闪烁5秒后熄灭。
作者: qingshuiyu    时间: 2022-10-19 02:56
第1个表述有点问题,不是MCU不能正常开机而是面板不允许操作且输出故障提示。
作者: zgrfox110    时间: 2022-10-19 07:14
qingshuiyu 发表于 2022-10-19 02:56
第1个表述有点问题,不是MCU不能正常开机而是面板不允许操作且输出故障提示。

编程就是数据的传送、搬运!首先你要知道如何搬运,其次是如何搬运,为什么搬运?就像做菜,案板就那一个,切菜也是拿来一样,切完了,拿走,再拿来一样菜!
作者: runmuel    时间: 2022-10-19 08:26
硬件完成?靠这个文字描述是不行的,没电路图也没有程序别人帮不了你的
作者: mcuhui    时间: 2022-10-19 08:48
图片为原理图请各位大师帮忙看看,谢谢!

图片2.png (465.17 KB, 下载次数: 61)

图片2.png

作者: xia20    时间: 2022-10-19 09:24
你程序起码也得有个框架出来别人才好帮你修正啊
作者: yzwzfyz    时间: 2022-10-19 09:51
你会画逻辑流程吗?试着先画出来。不着急写程序,先跑通流程图。
我在编程时,程序很复杂:如汉显、数显、温湿度、无线通讯、有线通讯、USB、数控、红外遥控、时间钟、FALSH……
都是列出所有的逻辑关系,表格。再画出程序流程图。
最后按流程图写程序,出问题时,按流程图审核,哪里错了,改进。
作者: runmuel    时间: 2022-10-19 10:28
建议将ADC检测配置做出来,主程序扫描按键和读取温度和电压的检测时间(比如定时每秒检测一次温度和BV电压值并处理),LED显示和ADC定时检测使用定时器做。电路有问题,输入电压低时MCU检测电压值就不准了,输入电压过低LED显示也成问题,建议MCU增加一个备用电池,117供电和备用电池都使用二极管隔离
作者: mcuhui    时间: 2022-10-19 11:01
qingshuiyu 发表于 2022-10-19 02:56
第1个表述有点问题,不是MCU不能正常开机而是面板不允许操作且输出故障提示。

其实表达的就是锁死按键,括号里面有备注。可能描述不准确。
作者: mcuhui    时间: 2022-10-19 11:02
zgrfox110 发表于 2022-10-19 07:14
编程就是数据的传送、搬运!首先你要知道如何搬运,其次是如何搬运,为什么搬运?就像做菜,案板就那一个 ...

感谢回复,那我学着慢慢搬运
作者: mcuhui    时间: 2022-10-19 11:02
runmuel 发表于 2022-10-19 08:26
硬件完成?靠这个文字描述是不行的,没电路图也没有程序别人帮不了你的

谢谢回复,原理图已贴
作者: mcuhui    时间: 2022-10-19 11:03
xia20 发表于 2022-10-19 09:24
你程序起码也得有个框架出来别人才好帮你修正啊

谢谢回复,就是框架不会搭建
作者: mcuhui    时间: 2022-10-19 11:04
yzwzfyz 发表于 2022-10-19 09:51
你会画逻辑流程吗?试着先画出来。不着急写程序,先跑通流程图。
我在编程时,程序很复杂:如汉显、数显、 ...

谢谢回复,感谢建议。那我来试着把程序流程图做出来然后在试试慢慢写程序。有问题在向您讨教。
作者: mcuhui    时间: 2022-10-19 11:07
runmuel 发表于 2022-10-19 10:28
建议将ADC检测配置做出来,主程序扫描按键和读取温度和电压的检测时间(比如定时每秒检测一次温度和BV电压 ...

谢谢回复及建议;这个用搭配电池包用的,如果电池电压过低电池包保护板就过放保护了。所以我理解只要B+电压在范围内就不会导致您说的这个问题。
作者: Y_G_G    时间: 2022-10-19 13:48
对谁都一样,不是高手不高手的
一步一步来,一个功能一个功能的去实现
比如,你先写LED指示灯的函数:"MCU正常开机且4颗LED跑马灯式依次全亮10秒后熄灭"
那就单单的写这个功能,其它都什么都不要,只写这个函数
单单这个功能应该能写吧,写完之后,放在程序中,烧录验证.别仿真,仿真那玩意没有用
然后就是其它功能,再一个一个的写,谁都是这个过程
你至少有个自己大的框架
作者: mcuhui    时间: 2022-10-19 15:20
Y_G_G 发表于 2022-10-19 13:48
对谁都一样,不是高手不高手的
一步一步来,一个功能一个功能的去实现
比如,你先写LED指示灯的函数:"MCU正 ...

谢谢回复;我觉得这个太难了。尤其是要去实现这些功能。不过我会根据你的建议一个模块一个模块去写去试。
作者: Y_G_G    时间: 2022-10-19 17:58
mcuhui 发表于 2022-10-19 15:20
谢谢回复;我觉得这个太难了。尤其是要去实现这些功能。不过我会根据你的建议一个模块一个模块去写去试。

这种功能本身就是没有什么很高深的难度,就是功能多而已
函数就像模块一样,一个一个的去写,一个一个的验证
大体功能就是那么几个:
端口初始化
指示灯
按键读取和处理
ADC,电压检测,温度检测,都是ADC完成的,像你这个功能对效率要求不高的,推荐ADC用中断来进行
每个功能要烧录进行验证,不要仿真,仿真不出来的

作者: mcuhui    时间: 2022-10-20 14:39
Y_G_G 发表于 2022-10-19 17:58
这种功能本身就是没有什么很高深的难度,就是功能多而已
函数就像模块一样,一个一个的去写,一个一个的验 ...

好的,谢谢指导。我比较菜我来试试看。我不仿真也用不来那玩意
作者: mcuhui    时间: 2022-10-20 14:40
这是我画的程序流程图,各位大师帮忙看看思路对不对?
作者: mcuhui    时间: 2022-10-20 15:11
流程图

作者: yzwzfyz    时间: 2022-10-20 16:29
楼主的图,当是功能模块图。
程序的流程:一定是一个封闭的环路。因为你的程序是一直运行的,它没有停止点。
也即任何一个方块都必须【有进有出】无输入只有一个:开机。
作者: Y_G_G    时间: 2022-10-20 18:47
你的代码肯定会有一个while(1),那就是一个闭环的死循环
那么,你对应的流程图也得有一个跑回去的流程才对呀
大概是:
A,开机
B,相关初始化
C,按键检测
D,电压检测
E,温度检测
F,相关指示,数码管或者LED灯之类的
G,回到C
如果有中断,中断就是在这个循环之外执行的
作者: mcuhui    时间: 2022-10-20 19:24
yzwzfyz 发表于 2022-10-20 16:29
楼主的图,当是功能模块图。
程序的流程:一定是一个封闭的环路。因为你的程序是一直运行的,它没有停止点 ...

谢谢指导,也就是相当于要执行主程序循环这个意思是吧?
作者: mcuhui    时间: 2022-10-20 19:24
Y_G_G 发表于 2022-10-20 18:47
你的代码肯定会有一个while(1),那就是一个闭环的死循环
那么,你对应的流程图也得有一个跑回去的流程才对呀 ...

明白了,就是主程序循环执行吧?谢谢指导
作者: ay247    时间: 2022-10-21 10:18
电路图还是要自己认真去做,去完成的,没有人能帮助你,加油,小伙子
作者: ay247    时间: 2022-10-21 10:18
尽量一个功能一个功能认真的去实现
作者: mcuhui    时间: 2022-10-22 08:15
ay247 发表于 2022-10-21 10:18
电路图还是要自己认真去做,去完成的,没有人能帮助你,加油,小伙子

谢谢回复,电路图已经画好了。其实大家都帮助了很多。谢谢鼓励!
作者: mcuhui    时间: 2022-10-22 08:16
ay247 发表于 2022-10-21 10:18
尽量一个功能一个功能认真的去实现

谢谢回复,目前正在一步一步去验证
作者: suncat0504    时间: 2022-10-22 09:18
涉及定时的,用得到定时器中断处理。主程序中设置启动标志,定时中断中根据标志控制输出、计算时间,时间到,清除标志和改变控制输出。中断处理本身也需要一个流程。刚入行,简单看下程序结构设计、流程图设计




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1