# 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;
/******************************************************
函數名稱: deplay(u16 t)
函數功能: 產生時間延時
入口參數: t
出口參數: 無
備注:
*******************************************************/
void delay(u16 t)
{
u8 i;
while(t--)
{
for (i=0;i<19;i++);
}
}
/*******************************************************
函數名稱: beepon()
函數功能: 讓蜂鳴器短暫發聲用來作為發送和接收數據指示
入口參數: 無
出口參數: 無
備注:
******************************************************/
void beepon()
{
beep=0;
delay(500);
beep=1;
}
/********************************************************
函數名稱: LEDflash()
函數功能; 讓發光二極管閃耀
入口參數: 無
出口參數: 無
備注:
********************************************************/
void LEDflash()
{
LED=0;
delay(300);
LED=1;
}
/*******************************************************
函數名稱: UART_inin()
函數功能; 串行通信初始化函數,做好發送和接收的準備
入口參數: 無
出口參數: 無
備注:
********************************************************/
void UART_init()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
/******************************************************
函數名稱: display(u16 k)
函數功能; 顯示向pc發出的數據和pc發來的數據
入口參數: k
出口參數: 無
備注:
*****************************************************/
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;
}
/******************************************************
函數名稱: send()
函數功能; 向pc發送數據
入口參數: 無
出口參數: 無
備注:
*****************************************************/
void send()
{
ES=0; //暫時關閉串行中斷,否則會又會進入中斷服務程序,把a=SBUF;flag=1;
flag=0;
SBUF=datavalue;
while(!TI); //如果TI=1,就把它等待
TI=0; //一旦TI=0,就把它清零
ES=1; //閉合串行中斷開關
}
/******************************************************
函數名稱: main()
函數功能; 初始化串口,連續判斷遙控器哪個鍵按下并做相應的處理
入口參數: 無
出口參數: 無
備注:
*****************************************************/
main()
{
P1=0xff;
UART_init(); //置輸入狀態
while(1) //串口工作前的準備工作
{
dat=(P1&0x0f); //把遙控器按鍵狀態通過P1口送給變量dat
if(dat==0x08) //遙控器A鍵按下
{
delay(120);
dat=0;
beepon();
LEDflash();
datavalue++;
dat=0;
send();
}
if(dat==0x02) //C鍵按下,清零
{
delay(120);
dat=0;
beepon();
LEDflash();
datavalue=0;
send();
}
if(dat==0x01) //按下D鍵就發送
{
delay(120);
beepon();
LEDflash();
datavalue--;
send();
}
display(datavalue); //將讀到的數顯示
}
}
/******************************************************
函數名稱: serial(void) interrupt 4
函數功能; 通過串行中斷服務函數接收從PC發來的數據
入口參數: 無
出口參數: 無
備注: 串行中斷的中斷號是4
*****************************************************/
void serial(void) interrupt 4
{
RI=0;
datavalue=SBUF; //將串口接收到的數據保存到datavalue變量中
display(datavalue); //顯示接收的數據
flag=1; //置收到數據的標志
beepon(); //蜂鳴器響一聲
LEDflash(); //發光二極管閃一下
}
|