登录注册
论坛
一粒金砂(中级)
4
0
小白求大佬写个定时+点灯的程序,就是相当于IO脚当做一个按键来用每20秒按一次。 硬件这样吧,不知道有没有错,MCU用的STC8G1K08A-36I-DFN8 1.png (51.68 KB, 下载次数: 0) 下载附件 保存到相册 2024-8-3 14:06 上传
1.png (51.68 KB, 下载次数: 0)
下载附件 保存到相册
2024-8-3 14:06 上传
1、开机后每20秒拉低1秒,无操作1小时后关机或休眠 2、K2断开1小时定时关机,闭合2小定时关机或休眠 3、K1触发一次重新计时1或2小时。
硬件这样有问题吗? 求大佬门给个 keil能编译过的程序或编译好的固件也行
扫一扫,分享给好友
版主
6533
9
你这上来就20秒定时或者无操作1小时这些动作,时间太长了,你的这个需求实际上涉及到的就是GPIO的输出控制和输入采集,还有定时器,没有什么太特别的
在爱好的道路上不断前进,在生活的迷雾中播撒光引
秦天qintian0303 发表于 2024-8-3 19:08 你这上来就20秒定时或者无操作1小时这些动作,时间太长了,你的这个需求实际上涉及到的就是GPIO的输出控制 ...
时间太久了不行吗??不懂程序………………
7244
2
这逻辑,电路这么设计看着没问题,作业吗?还是用在什么产品上。
6107
图片.png (129.62 KB, 下载次数: 0) 下载附件 保存到相册 2024-8-5 12:43 上传
图片.png (129.62 KB, 下载次数: 0)
2024-8-5 12:43 上传
#include <reg52.h> sbit LED = P1^0; sbit K1 =P5^4; sbit K2 = P3^2; #define TiMVAL 20 #define TiMCLOSEVAL1 3600 #define TiMCLOSEVAL2 7200 unsgined int T =0; unsgined int TOVER =7200; void delay(unsigned int time) { while(time--); } void main() { SCON = 0x50; // 用于启用定时器0,但不用于串口通信 TMOD |= 0x01; // 设置定时器0为16位定时模式,使用系统时钟/12 TH0 = 0xFC; // 设置定时器0的初始高8位 TL0 = 0x67; // 设置定时器0的初始低8位,定时1ms EA = 1; // 开启总中断 ET0 = 1; // 开启定时器0中断 TR0 = 1; // 启动定时器0 T =0; while(1) { if(K1 == 0) { delay(100); // 消抖处理 if(K1 == 0) { if(K2 == 0) { TOVER =TiMCLOSEVAL2; } else { TOVER =TiMCLOSEVAL1; } } } } } void timer0() interrupt 1 { static unsigned char count = 0; TH0 = 0xFC; // 重新加载定时器0的高8位 TL0 = 0x67; // 重新加载定时器0的低8位 if(++count == 1000) { // 1s中断一次 count = 0; static unsigned char CT20 =0; CT20++; if(CT20 >=20) { CT20=0; LED = 0; // 切换LED状态 } else LED =1; T++; if(T >= TOVER) { //关机 这里自己整 } } }
纯净的硅(初级)
194
你可以参考 STC-ISP 根据你的芯片型号, 都是提供的有demo的. 关于你的定时器定时的时间, 你需要自己去使用定时器的计时器去计算(STC也有提供)
发表回复 回帖后跳转到最后一页
论坛测评队员
EEWorld Datasheet 技术支持
查看 »