标题:
单片机程序解读不太理解,请教一下,第一次见到这么多变量
[打印本页]
作者:
王披风
时间:
2021-10-11 14:22
标题:
单片机程序解读不太理解,请教一下,第一次见到这么多变量
开盒函数和关箱那一串运算不太能理解,求指点一下是什么意思。有点不知道为啥要这样弄。
单片机源程序如下:
#include "STC12C5A60S2.h"
#include <intrins.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define RdCommand 0x01
#define PrgCommand 0x02
#define EraseCommand 0x03
#define ENABLE_IAP 0x83
sbit KEY_OPEN=P3^6;
sbit KEY_CLOSE=P3^7;
sbit GYQ_CLOSE=P1^0;
sbit GYQ_OPEN=P1^1;
sbit XG_KAI=P0^1;
sbit XG_GUAN=P0^0;
sbit DCF1=P0^2;Ë
sbit DCF2=P0^3;
sbit DCF3=P0^4;
sbit LED_GREEN=P0^6;
sbit LED_RED=P0^7;
uchar flag_ck=0;
uchar flag_int=0;
uchar flag_lock=0;
uchar flag_click;
uchar flag_open_fail=0;
uchar flag_close_fail=0;
uchar flag_value;
uchar str[]={'0','0','0','0','0','0','0','0','0','0','0','0'};
uchar flag_auto = 0;
void delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=880;j>0;j--);
}
void SendByte(uchar dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void SendStr(uchar *s)
{
ES=0;
while(*s!='\0')
{
SendByte(*s);
s++;
}
ES=1;
}
//打开盒子函数
void boxopen()
{
uchar i;
flag_open_fail=0;
XG_GUAN=1;
delay_ms(10);
XG_KAI=0;
// delay_ms(1500);
for(i=0;i<25;i++)
{
delay_ms(200);
if(GYQ_OPEN==0)
break;
}
if(i>24)
{
XG_GUAN=1;
delay_ms(10);
XG_KAI=0;
flag_open_fail=1;
}
if(flag_open_fail==0)
{
SendStr("OK\r\n");
}
}
//******************************************************************************
//
//******************************************************************************
void boxclose_key()
{
flag_close_fail=0;
flag_int=0;
LED_GREEN=1;
LED_RED=1;
IE0=0;
EX0=1;
while((KEY_CLOSE==0)&&(flag_int==0))
{
XG_KAI=1;
delay_ms(10);
XG_GUAN=0;
}
if(GYQ_CLOSE==0)
{
EX0=0;
SendStr("READY\r\n");
}
else
{
EX0=0;
XG_GUAN=1;
delay_ms(10);
XG_KAI=0;
flag_close_fail=1;
}
}
//******************************************************************************
void boxclose_ck()
{
uchar i;
flag_close_fail=0;
flag_int=0;
LED_GREEN=1;
LED_RED=1;
IE0=0;
EX0=1;
XG_KAI=1;
delay_ms(10);
XG_GUAN=0;
delay_ms(1000);
for(i=0;((i<30)&&(flag_int==0));i++)
{
delay_ms(200);
if(GYQ_CLOSE==0)
break;
}
if((i>29)||(flag_int==1))
{
EX0=0;
XG_GUAN=1;
delay_ms(10);
XG_KAI=0;
flag_close_fail=1;
}
if(flag_close_fail==0)
{
EX0=0;
SendStr("READY\r\n");
}
}
复制代码
作者:
shumivan
时间:
2021-10-11 16:04
谈思路:当你看别人的程序的时候,不管是变量多与少,你习惯性地进行全局查找,把变量的含义弄懂,然后统筹去理解
作者:
jizhongbiao
时间:
2021-10-11 17:32
用sourceinsight vscode一类的代码编辑工具,再多变量也不成问题,另外你这段程序也没有几个变量啊。。。
作者:
188610329
时间:
2021-10-11 18:37
说实话,变量真的不多,还没有模拟串口的范例变量多呢。
整个程序也就开盒,关盒, 你这么问,其实等于在问这个程序啥意思……
整个程序也不是很复杂,无非开盒然后记个数,多少时间内正常开盒的话,应该行程开关GYQ_OPEN会返回低电平,超时没有低电平说明盒子没有打开,返回打开失败,反之打开成功。 静下心来应该就能看明白。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1