hl1200aa
发表于 2023-12-10 14:25:10
本帖最后由 hl1200aa 于 2023-12-10 14:28 编辑
再刷了一下陈老师的定时器和中断,把5秒超时关闭加了上去,基本完成了。
/*********************************************************/
#define MAIN_Fosc 11059200L //定义主时钟
#include "STC8Gxxx.h"
/************* 功能说明 *************
整体布局
功能 管脚 用途 输入输出 类型 PXM1PXM0
P10 PIN19 传感器输入 输入 高阻 1 0
P11 PIN20 seg_a 输出 开漏输出1 1
P12 PIN1 seg_e 输出 开漏输出1 1
P13 PIN2 seg_f 输出 开漏输出1 1
P14 PIN3 seg_b 输出 开漏输出1 1
P15 PIN4 seg_d 输出 开漏输出1 1
P16 PIN5 seg_c 输出 开漏输出1 1
P17 PIN6 seg_g 输出 开漏输出1 1
P0M1 = 11111110B 0xff
P0M0 = 11111110B 0xfe
功能 管脚 用途 输入输出 类型 PXM1PXM0
P30 PIN11 RX不分配 0 0
P31 PIN12 TX不分配 0 0
P32 PIN13 NO2输入 输入 准双口 0 0 设置为高电平
P33 PIN14 NO1输出 输出 推挽输出0 1 缺省高电平。
P34 PIN15 NO2输出 输出 推挽输出0 1 缺省高电平。
P35 PIN16 数码管共阳G1 输出 推挽输出0 1
P36 PIN17 数码管共阳G2 输出 推挽输出0 1
P37 PIN18 红外管输出 输出 开漏输出1 1 0发光,1灭光
P3M1 = 1000 0000B 0x80
P3M0 = 1111 1000B 0xf8
功能 管脚 用途 输入输出 类型 PXM1PXM0
P54 PIN7 seg_dp 输出 开漏输出1 1
P55 PIN9 NO1输入 输入 准双口 0 0 设置为高电平
P5M0 = 0001 0000B 0x10
P5M1 = 0001 0000B 0x10
******************************************/
/************* 本地常量声明 **************/
#define timeout_ms 5000
#define NO1_IN_ON (P55 == 1)
#define NO2_IN_ON (P32 == 1)
#define NO1_OPEN (P33 = 0)
#define NO1_CLOSE (P33 = 1)
#define NO2_OPEN (P34 = 0)
#define NO2_CLOSE (P34 = 1)
#define IR_ON (P37 = 0)
#define IR_OFF (P37 = 1)
#define G1_ON (P35 = 1)
#define G1_OFF (P35 = 0)
#define G2_ON (P36 = 1)
#define G2_OFF (P36 = 0)
#define SENSOR_ON(P10 == 0)
/************* 本地变量声明 **************/
//用一个变量记录时间
unsigned int time_count_ms = 0;
/************* 本地函数声明 **************/
/****************外部函数声明和外部变量声明 *****************/
/**********************************************/
void Delay100ms(void) //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//初始化T0
void time_init_T0(void)
{
AUXR &= 0x7f;//定时器时钟12T模式
TMOD &= 0xf0;//设置定时器模式
}
//开启T0 50ms计时,并且开启中断
void time_start_T0(void)
{
TL0=0x00;//设置定时器初始值
TH0=0x4c;//设置定时器初始值
TF0=0; //清除TF位
ET0=1; //允许T0中断
time_count_ms = 0;
TR0=1; //定时器0开始计数
}
//关闭T0 50ms计时,并且开启中断
void time_stop_T0(void)
{
ET0=1; //禁止T0中断
TF0=0; //清除TF位
TR0=0; //禁止器0开始计数
TL0=0x00;//设置定时器初始值
TH0=0x4c;//设置定时器初始值
time_count_ms = 0;
}
//定时器0中断函数
void T0_ISR(void) interrupt 1
{
TF0=0; //清除TF位
time_count_ms += 50;
}
void main(void)
{
int time100ms = 0;
char statu_g1 = 0;
char statu_g2 = 0;
P_SW2 |= 0x80; //允许访问XSFR(扩展特殊功能寄存器)
//设置管脚模式
P1M1 = 0xff;
P1M0 = 0xfe;
P3M1 = 0x80;
P3M0 = 0xf8;
P5M1 = 0x10;
P5M0 = 0x10;
//P32, P55设置上拉电阻
P32 = 1;
P55 = 1;
//关闭开关
NO1_CLOSE;
NO2_CLOSE;
//关闭IR
IR_OFF;
//关闭G1,G2
G1_OFF;
G2_OFF;
//全部打开数码管的seg
P1 &= 0x01;
P54 = 0;
G1_ON;
G2_ON;
for(time100ms = 10; time100ms > 0; time100ms--)
{
Delay100ms();
}
G1_OFF;
G2_OFF;
//初始化计数器
time_init_T0();
//打开全局中断
EA = 1;
while (1)
{
/*
for(time100ms = 10; time100ms > 0; time100ms--)
{
Delay100ms();
}
P54 = 1;
P1 = P1 | 0xfe;
for(time100ms = 10; time100ms > 0; time100ms--)
{
Delay100ms();
}
P54 = 0;
P1 = P1 & 0x01;
*/
if(NO1_IN_ON)// NO1 按下按键高电平
{
//如果G1, G2处于关闭状态
if (statu_g2 == 0)
{
G1_ON;//点亮1号数码管
statu_g1 = 1; //改g1状态
IR_ON; //打开红外
//启动定时器
time_stop_T0();
time_start_T0();
}
}
if(NO2_IN_ON)// NO2 按下按键高电平
{
//如果G1处于关闭状态
if (statu_g1 == 0)
{
G2_ON;//点亮2号数码管
statu_g2 = 1;
IR_ON; //打开红外
//启动定时器
time_stop_T0();
time_start_T0();
}
}
if(SENSOR_ON || (time_count_ms > timeout_ms))
{
//关闭计数器
time_stop_T0();
//关闭红外
IR_OFF;
//关闭数码管
G1_OFF;
G2_OFF;
//改状态
statu_g1 = 0;
statu_g2 = 0;
}
}
}
/**********************************************/
hl1200aa
发表于 2023-12-10 14:45:39
其实搞这个原意并非和供应商夺食,只是这两年经历太多昨晚还推杯换盏,规划宏图,一觉醒来就科目三的事情,老板的消息比较灵通,他叫不要麻烦供应商实情可能是不久的将来麻烦不到供应商,只能凭自己的能力维护设备了,经历过的都懂。
在这个市场风雨飘摇的时局中,写一下与诸位共勉。
白开水1233
发表于 2023-12-10 16:09:14
牛
D_Works
发表于 2023-12-13 08:17:23
楼主厉害了!修个设备马上就能开发了!
pangshijz
发表于 2023-12-13 09:11:04
买个芯片?不用写程序的吗
wpppmlah
发表于 2023-12-13 10:52:16
有钱赚,有兴趣,就有动力,加油楼主。
ydcsb
发表于 2023-12-13 11:03:57
加油,我们也是。以前设备上的驱动板也是买的,后来我们要更改一些功能,厂家这个不能改那个不能改,还涨价。后来干脆自已搞一个,经过差不多3个月的学习(听陈老师的课,边学边弄边测试,不懂的就在论坛内问问),竞然被我搞成了。{:4_174:}自已都不相信自已能够搞成功
hl1200aa
发表于 2023-12-17 20:48:17
掌握核心技术就是爽,星期四客户有个机器坏了,供应商说零件下周三才能到,客户则要星期一修好,最后修修改改这个板,通宵肝出来去打样,再修改一下代码,今天星期日打样到了,零件也到了,焊起来刷好hex一切正常,晚上给客户装起来ok了。
装前留念
attach://29994.mp4
shanmudadao
发表于 2023-12-18 07:56:00
hl1200aa 发表于 2023-12-17 20:48
掌握核心技术就是爽,星期四客户有个机器坏了,供应商说零件下周三才能到,客户则要星期一修好,最后修修改 ...
成就感爆棚{:4_245:}
小白
发表于 2023-12-18 09:42:25
hl1200aa 发表于 2023-11-12 21:37
看视频和站内的资料,整个流程应该是
1. keil写代码,编译出hex文件。
2. 用stc-isp通过TTL线连接STC8G1K08 ...
这个过分的要求,你都能说出口{:lol:}