找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2112|回复: 28
收起左侧

自学了好长时间C51单片机还是懵懵懂懂,求指导下程序 硬件已经完成了

[复制链接]
ID:1001745 发表于 2022-10-18 19:45 | 显示全部楼层 |阅读模式
能力有限,自学了好长时间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秒后熄灭。
回复

使用道具 举报

ID:1043624 发表于 2022-10-19 02:56 | 显示全部楼层
第1个表述有点问题,不是MCU不能正常开机而是面板不允许操作且输出故障提示。
回复

使用道具 举报

ID:525244 发表于 2022-10-19 07:14 来自手机 | 显示全部楼层
qingshuiyu 发表于 2022-10-19 02:56
第1个表述有点问题,不是MCU不能正常开机而是面板不允许操作且输出故障提示。

编程就是数据的传送、搬运!首先你要知道如何搬运,其次是如何搬运,为什么搬运?就像做菜,案板就那一个,切菜也是拿来一样,切完了,拿走,再拿来一样菜!
回复

使用道具 举报

ID:60370 发表于 2022-10-19 08:26 | 显示全部楼层
硬件完成?靠这个文字描述是不行的,没电路图也没有程序别人帮不了你的
回复

使用道具 举报

ID:1001745 发表于 2022-10-19 08:48 | 显示全部楼层
图片为原理图请各位大师帮忙看看,谢谢!
图片2.png
回复

使用道具 举报

ID:198189 发表于 2022-10-19 09:24 | 显示全部楼层
你程序起码也得有个框架出来别人才好帮你修正啊
回复

使用道具 举报

ID:123289 发表于 2022-10-19 09:51 | 显示全部楼层
你会画逻辑流程吗?试着先画出来。不着急写程序,先跑通流程图。
我在编程时,程序很复杂:如汉显、数显、温湿度、无线通讯、有线通讯、USB、数控、红外遥控、时间钟、FALSH……
都是列出所有的逻辑关系,表格。再画出程序流程图。
最后按流程图写程序,出问题时,按流程图审核,哪里错了,改进。
回复

使用道具 举报

ID:60370 发表于 2022-10-19 10:28 | 显示全部楼层
建议将ADC检测配置做出来,主程序扫描按键和读取温度和电压的检测时间(比如定时每秒检测一次温度和BV电压值并处理),LED显示和ADC定时检测使用定时器做。电路有问题,输入电压低时MCU检测电压值就不准了,输入电压过低LED显示也成问题,建议MCU增加一个备用电池,117供电和备用电池都使用二极管隔离
回复

使用道具 举报

ID:1001745 发表于 2022-10-19 11:01 | 显示全部楼层
qingshuiyu 发表于 2022-10-19 02:56
第1个表述有点问题,不是MCU不能正常开机而是面板不允许操作且输出故障提示。

其实表达的就是锁死按键,括号里面有备注。可能描述不准确。
回复

使用道具 举报

ID:1001745 发表于 2022-10-19 11:02 | 显示全部楼层
zgrfox110 发表于 2022-10-19 07:14
编程就是数据的传送、搬运!首先你要知道如何搬运,其次是如何搬运,为什么搬运?就像做菜,案板就那一个 ...

感谢回复,那我学着慢慢搬运
回复

使用道具 举报

ID:1001745 发表于 2022-10-19 11:02 | 显示全部楼层
runmuel 发表于 2022-10-19 08:26
硬件完成?靠这个文字描述是不行的,没电路图也没有程序别人帮不了你的

谢谢回复,原理图已贴
回复

使用道具 举报

ID:1001745 发表于 2022-10-19 11:03 | 显示全部楼层
xia20 发表于 2022-10-19 09:24
你程序起码也得有个框架出来别人才好帮你修正啊

谢谢回复,就是框架不会搭建
回复

使用道具 举报

ID:1001745 发表于 2022-10-19 11:04 | 显示全部楼层
yzwzfyz 发表于 2022-10-19 09:51
你会画逻辑流程吗?试着先画出来。不着急写程序,先跑通流程图。
我在编程时,程序很复杂:如汉显、数显、 ...

谢谢回复,感谢建议。那我来试着把程序流程图做出来然后在试试慢慢写程序。有问题在向您讨教。
回复

使用道具 举报

ID:1001745 发表于 2022-10-19 11:07 | 显示全部楼层
runmuel 发表于 2022-10-19 10:28
建议将ADC检测配置做出来,主程序扫描按键和读取温度和电压的检测时间(比如定时每秒检测一次温度和BV电压 ...

谢谢回复及建议;这个用搭配电池包用的,如果电池电压过低电池包保护板就过放保护了。所以我理解只要B+电压在范围内就不会导致您说的这个问题。
回复

使用道具 举报

ID:401564 发表于 2022-10-19 13:48 | 显示全部楼层
对谁都一样,不是高手不高手的
一步一步来,一个功能一个功能的去实现
比如,你先写LED指示灯的函数:"MCU正常开机且4颗LED跑马灯式依次全亮10秒后熄灭"
那就单单的写这个功能,其它都什么都不要,只写这个函数
单单这个功能应该能写吧,写完之后,放在程序中,烧录验证.别仿真,仿真那玩意没有用
然后就是其它功能,再一个一个的写,谁都是这个过程
你至少有个自己大的框架
回复

使用道具 举报

ID:1001745 发表于 2022-10-19 15:20 | 显示全部楼层
Y_G_G 发表于 2022-10-19 13:48
对谁都一样,不是高手不高手的
一步一步来,一个功能一个功能的去实现
比如,你先写LED指示灯的函数:"MCU正 ...

谢谢回复;我觉得这个太难了。尤其是要去实现这些功能。不过我会根据你的建议一个模块一个模块去写去试。
回复

使用道具 举报

ID:401564 发表于 2022-10-19 17:58 | 显示全部楼层
mcuhui 发表于 2022-10-19 15:20
谢谢回复;我觉得这个太难了。尤其是要去实现这些功能。不过我会根据你的建议一个模块一个模块去写去试。

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

使用道具 举报

ID:1001745 发表于 2022-10-20 14:39 | 显示全部楼层
Y_G_G 发表于 2022-10-19 17:58
这种功能本身就是没有什么很高深的难度,就是功能多而已
函数就像模块一样,一个一个的去写,一个一个的验 ...

好的,谢谢指导。我比较菜我来试试看。我不仿真也用不来那玩意
回复

使用道具 举报

ID:1001745 发表于 2022-10-20 14:40 | 显示全部楼层
这是我画的程序流程图,各位大师帮忙看看思路对不对?
回复

使用道具 举报

ID:1001745 发表于 2022-10-20 15:11 | 显示全部楼层
lct.png 流程图
回复

使用道具 举报

ID:123289 发表于 2022-10-20 16:29 | 显示全部楼层
楼主的图,当是功能模块图。
程序的流程:一定是一个封闭的环路。因为你的程序是一直运行的,它没有停止点。
也即任何一个方块都必须【有进有出】无输入只有一个:开机。
回复

使用道具 举报

ID:401564 发表于 2022-10-20 18:47 | 显示全部楼层
你的代码肯定会有一个while(1),那就是一个闭环的死循环
那么,你对应的流程图也得有一个跑回去的流程才对呀
大概是:
A,开机
B,相关初始化
C,按键检测
D,电压检测
E,温度检测
F,相关指示,数码管或者LED灯之类的
G,回到C
如果有中断,中断就是在这个循环之外执行的
回复

使用道具 举报

ID:1001745 发表于 2022-10-20 19:24 | 显示全部楼层
yzwzfyz 发表于 2022-10-20 16:29
楼主的图,当是功能模块图。
程序的流程:一定是一个封闭的环路。因为你的程序是一直运行的,它没有停止点 ...

谢谢指导,也就是相当于要执行主程序循环这个意思是吧?
回复

使用道具 举报

ID:1001745 发表于 2022-10-20 19:24 | 显示全部楼层
Y_G_G 发表于 2022-10-20 18:47
你的代码肯定会有一个while(1),那就是一个闭环的死循环
那么,你对应的流程图也得有一个跑回去的流程才对呀 ...

明白了,就是主程序循环执行吧?谢谢指导
回复

使用道具 举报

ID:1048438 发表于 2022-10-21 10:18 | 显示全部楼层
电路图还是要自己认真去做,去完成的,没有人能帮助你,加油,小伙子
回复

使用道具 举报

ID:1048438 发表于 2022-10-21 10:18 | 显示全部楼层
尽量一个功能一个功能认真的去实现
回复

使用道具 举报

ID:1001745 发表于 2022-10-22 08:15 | 显示全部楼层
ay247 发表于 2022-10-21 10:18
电路图还是要自己认真去做,去完成的,没有人能帮助你,加油,小伙子

谢谢回复,电路图已经画好了。其实大家都帮助了很多。谢谢鼓励!
回复

使用道具 举报

ID:1001745 发表于 2022-10-22 08:16 | 显示全部楼层
ay247 发表于 2022-10-21 10:18
尽量一个功能一个功能认真的去实现

谢谢回复,目前正在一步一步去验证
回复

使用道具 举报

ID:517466 发表于 2022-10-22 09:18 | 显示全部楼层
涉及定时的,用得到定时器中断处理。主程序中设置启动标志,定时中断中根据标志控制输出、计算时间,时间到,清除标志和改变控制输出。中断处理本身也需要一个流程。刚入行,简单看下程序结构设计、流程图设计
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表