|

楼主 |
发表于 2024-8-1 20:19:23
|
显示全部楼层
本帖最后由 jeromeli 于 2024-8-3 13:18 编辑
- #include <stc8g.h> // 包含STC8系列单片机的寄存器定义
- #define LED P3^2 // 定义LED接的端口
- #define K1 P5^4 // 定义按键K1接的端口
- #define K2 P3^3 // 定义按键K2接的端口
- unsigned int timer = 0; // 定义定时器变量
- unsigned char state = 0; // 定义状态变量,0表示开机,1表示K1触发,2表示K2触发
- void Delay(unsigned int ms) { // 毫秒级延时函数
- unsigned int i, j;
- for (i = ms; i > 0; i--)
- for (j = 110; j > 0; j--);
- }
- void Timer0_Init() { // 定时器0初始化
- TMOD &= 0xF0; // 设置定时器模式
- TMOD |= 0x01; // 定时器0工作在模式1
- TH0 = (65536 - 500) / 256; // 定时器初值设置,这里设置为500ms中断一次
- TL0 = (65536 - 500) % 256;
- ET0 = 1; // 开启定时器0中断
- EA = 1; // 开启总中断
- TR0 = 1; // 启动定时器0
- }
- void Check_K1() { // 检测按键K1是否被触发
- if (K1 == 0) { // 检测到按键按下
- Delay(200); // 去抖动
- if (K1 == 0) {
- state = 1; // 设置状态为K1触发
- timer = 0; // 重置定时器
- }
- }
- }
- void Check_K2() { // 检测按键K2是否被触发
- if (K2 == 0) { // 检测到按键按下
- Delay(200); // 去抖动
- if (K2 == 0) {
- state = 2; // 设置状态为K2触发
- timer = 0; // 重置定时器
- }
- }
- }
- void Timer0_ISR() interrupt 1 { // 定时器0中断服务程序
- TH0 = (65536 - 500) / 256; // 重新加载定时器初值
- TL0 = (65536 - 500) % 256;
- timer += 1; // 定时器增加
- switch (state) {
- case 0: // 开机状态
- if (timer % 21 == 0) { // 每20秒
- LED = !LED; // 切换LED状态
- }
- break;
- case 1: // K1触发状态
- if (timer >= 30) { // 0.5小时后
- while (1); // 关机
- }
- break;
- case 2: // K2触发状态
- if (timer >= 120) { // 2小时后
- while (1); // 关机
- }
- break;
- }
- }
- void main() {
- Timer0_Init(); // 初始化定时器
- while (1) {
- Check_K1(); // 检查按键K1
- Check_K2(); // 检查按键K2
- }
- }
复制代码 报错这个是什么鬼??
Rebuild started: Project: STC8
Rebuild target 'Target 1'
compiling led.c...
led.c(54): error C141: syntax error near '=', expected ';'
Target not created.
Build Time Elapsed: 00:00:00
54行??红色那里就是54行
|
|