標(biāo)題:
單片機(jī)程序解讀不太理解,請(qǐng)教一下,第一次見到這么多變量
[打印本頁(yè)]
作者:
王披風(fēng)
時(shí)間:
2021-10-11 14:22
標(biāo)題:
單片機(jī)程序解讀不太理解,請(qǐng)教一下,第一次見到這么多變量
開盒函數(shù)和關(guān)箱那一串運(yùn)算不太能理解,求指點(diǎn)一下是什么意思。有點(diǎn)不知道為啥要這樣弄。
單片機(jī)源程序如下:
#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;
}
//打開盒子函數(shù)
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");
}
}
復(fù)制代碼
作者:
shumivan
時(shí)間:
2021-10-11 16:04
談思路:當(dāng)你看別人的程序的時(shí)候,不管是變量多與少,你習(xí)慣性地進(jìn)行全局查找,把變量的含義弄懂,然后統(tǒng)籌去理解
作者:
jizhongbiao
時(shí)間:
2021-10-11 17:32
用sourceinsight vscode一類的代碼編輯工具,再多變量也不成問題,另外你這段程序也沒有幾個(gè)變量啊。。。
作者:
188610329
時(shí)間:
2021-10-11 18:37
說實(shí)話,變量真的不多,還沒有模擬串口的范例變量多呢。
整個(gè)程序也就開盒,關(guān)盒, 你這么問,其實(shí)等于在問這個(gè)程序啥意思……
整個(gè)程序也不是很復(fù)雜,無(wú)非開盒然后記個(gè)數(shù),多少時(shí)間內(nèi)正常開盒的話,應(yīng)該行程開關(guān)GYQ_OPEN會(huì)返回低電平,超時(shí)沒有低電平說明盒子沒有打開,返回打開失敗,反之打開成功。 靜下心來應(yīng)該就能看明白。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1