找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2912|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

求大神解釋代碼實現(xiàn)的功能 初學(xué)者

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:77317 發(fā)表于 2015-4-18 19:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
# include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 code d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 code dp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
u8 code w[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
u8 dat,flag,datavalue=0;
sbit beep=P3^7;
sbit LED=P3^6;

/******************************************************

函數(shù)名稱:    deplay(u16 t)
函數(shù)功能:    產(chǎn)生時間延時
入口參數(shù):   t
出口參數(shù):   無
備注:
*******************************************************/

void delay(u16 t)
{
u8 i;
while(t--)
{
for (i=0;i<19;i++);
}
}

/*******************************************************

函數(shù)名稱:  beepon()
函數(shù)功能:    讓蜂鳴器短暫發(fā)聲用來作為發(fā)送和接收數(shù)據(jù)指示
入口參數(shù):   無
出口參數(shù):   無
備注:

******************************************************/

void beepon()
{
beep=0;
delay(500);
beep=1;
}

/********************************************************

函數(shù)名稱:                 LEDflash()
函數(shù)功能;                 讓發(fā)光二極管閃耀
入口參數(shù):                 無
出口參數(shù):                 無
備注:

********************************************************/

void LEDflash()
{
LED=0;
delay(300);
LED=1;
}

/*******************************************************

函數(shù)名稱:                   UART_inin()
函數(shù)功能;                    串行通信初始化函數(shù),做好發(fā)送和接收的準(zhǔn)備
入口參數(shù):                        無
出口參數(shù):                        無
備注:

********************************************************/

void UART_init()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}

/******************************************************

函數(shù)名稱:            display(u16 k)          
函數(shù)功能;                顯示向pc發(fā)出的數(shù)據(jù)和pc發(fā)來的數(shù)據(jù)
入口參數(shù):                k
出口參數(shù):                無       
備注:
                                  
*****************************************************/

void display(u16 k)
{
P0=d[k/1000];
P2=w[3];
delay(30);

P0=d[k/100%10];
P2=w[2];
delay(30);

P0=d[k/10%10];
P2=w[1];
delay(30);

P0=d[k%10];
P2=w[0];
delay(30);

P1=0x00;
}

/******************************************************

函數(shù)名稱:            send()          
函數(shù)功能;                向pc發(fā)送數(shù)據(jù)
入口參數(shù):                無
出口參數(shù):                無       
備注:
                                  
*****************************************************/

void send()
{
ES=0;                             //暫時關(guān)閉串行中斷,否則會又會進入中斷服務(wù)程序,把a=SBUF;flag=1;
flag=0;
SBUF=datavalue;
while(!TI);                         //如果TI=1,就把它等待
TI=0;                                 //一旦TI=0,就把它清零
ES=1;                                 //閉合串行中斷開關(guān)
}

/******************************************************

函數(shù)名稱:            main()          
函數(shù)功能;                初始化串口,連續(xù)判斷遙控器哪個鍵按下并做相應(yīng)的處理
入口參數(shù):                無
出口參數(shù):                無       
備注:
                                  
*****************************************************/

main()
{
P1=0xff;
UART_init();                                  //置輸入狀態(tài)
while(1)                                         //串口工作前的準(zhǔn)備工作
{
dat=(P1&0x0f);                                //把遙控器按鍵狀態(tài)通過P1口送給變量dat
if(dat==0x08)              //遙控器A鍵按下
{
delay(120);
dat=0;
beepon();
LEDflash();
datavalue++;
dat=0;
send();
}
if(dat==0x02)                               
{
delay(120);
dat=0;
beepon();
LEDflash();
datavalue=0;
send();
}

if(dat==0x01)                               
{
delay(120);
beepon();
LEDflash();
datavalue--;
send();
}
display(datavalue);                       
}
}

/******************************************************

函數(shù)名稱:            serial(void) interrupt 4          
函數(shù)功能;                通過串行中斷服務(wù)函數(shù)接收從PC發(fā)來的數(shù)據(jù)
入口參數(shù):                無
出口參數(shù):                無       
備注:                 
                                  
*****************************************************/

void serial(void) interrupt 4
{
RI=0;
datavalue=SBUF;               
display(datavalue);       
flag=1;                               
beepon();               
LEDflash();                       
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:469932 發(fā)表于 2019-2-3 00:37 | 只看該作者
很好理解啊,咋就不明白了呢

評分

參與人數(shù) 1黑幣 +35 收起 理由
jinsheng7533967 + 35

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:474847 發(fā)表于 2019-2-3 16:12 | 只看該作者
具體實現(xiàn)的什么功能你代碼的注釋里寫了。。。。。。
比如你最后一段是這樣的
/******************************************************

函數(shù)名稱:            serial(void) interrupt 4           
函數(shù)功能;                通過串行中斷服務(wù)函數(shù)接收從PC發(fā)來的數(shù)據(jù)
入口參數(shù):                無
出口參數(shù):                無        
備注:                 
                                   
*****************************************************/

void serial(void) interrupt 4
{
RI=0;
datavalue=SBUF;               
display(datavalue);        
flag=1;                                
beepon();               
LEDflash();                        
}
那這一段就是用來通過串行中斷服務(wù)函數(shù)接收從PC發(fā)來的數(shù)據(jù)的。
結(jié)合單片機的原理圖來看代碼
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表