資源簡介
這是一段簡單的代碼,用單片機輸出38k信號,驅動紅外發射二極管,紅外接收裝置可以接收,實驗成功。
代碼片段和文件信息
/*********************************************************
Project?????????????:?Tm/Rh?Measurement
Chip?type???????????:?sst89e58
Program?type????????:?Application
Clock?frequency?????:?11.0592MHz
;**********************************************************/
#include?
#include?
/*===============變=量=類=型=標=識=宏=定=義===============*/
#define uchar unsigned?char
#define uint unsigned?int
#define ulong unsigned?long
#define ENABLE EA=1 //使能全局中斷
#define DISABLE EA=0 //關閉全局中斷
#define Timer0Run TR0=1 //啟動T0
#define Timer0Stop TR0=0 //關閉T0
#define Timer1Run TR1=1 //啟動T1
#define Timer1Stop TR1=0 //關閉T1
#define UartRxdEn REN=1; //串口允許接收
#define UartRxdDis REN=0; //串口禁止接收
#define LedDataPort ????P0 //Led數據端口
#define LedCntPort?? P2 //Led控制端口
#define Nop() _nop_()
#define Tm 20
/*===================控=制=引=腳=定=義===================*/
/*===================全=局=變=量=定=義===================*/
//共陽數碼管譯碼表
uchar??code LedCode[]={0xc00xf90xa40xb00x990x920x820xf8
??? ???0x800x900x880x830xc60xa10x860x8e
???0xbf};
//6位顯示緩沖
static?uchar?DispString[]={0x100x100x100x100x100x10};
static?uchar?RxdIntCnt =0; //Rxd中斷次數
/*=================系=統=標=志=位=定=義===================*/
/*==================系=統=函=數=聲=明=====================*/
//中斷初始化
void?IntInit(void);
//延時函數
void?Delayms(uchar?t);
void?Delayus(uchar?t);
/*========================主=函=數========================*/
void?main()
{
uchar?ij=0;
Delayms(10);
IntInit(); //初始化中斷
while(1)
{
j=0xfb;
for(i=0;i<6;i++)
{
LedDataPort=LedCode[DispString[i]]; //顯示代碼送數據端口
LedCntPort=j; //選擇顯示位置
j<<=1;
j|=0x01;
Delayms(2);
}
}
}
/*==================中=斷=初=始=化=程=序==================*/
/*==========================================================
;系統中斷初始化IntInit(void)
;輸入參數:無
;輸出參數:無
;函數說明:程序退出時,各中斷以使能
==========================================================*/
void?IntInit(void)
{
//初始化T1(用作波特率發生器)
TMOD=0x20; //T0方式1T1方式2
//初始化串行口
SCON=0x50; //串口方式1REN=1;
TH1=0xfd; //9600bps
TL1=0xfd;
Timer1Run; //啟動T1
IE=0x10; //ES=1
//使能全局中斷
ENABLE;
}
void?UartRxdService(void)?interrupt?4?using?1
{
RI=0;
switch(RxdIntCnt)
{
case?0:
if(SBUF==0xff)?RxdIntCnt++;
break;
case?1:
if(SBUF==0xa5)?RxdIntCnt++;
break;
case?2:
???? RxdIntCnt++;
DispString[0]=SBUF;
break;
case?3:
???? RxdIntCnt++;
DispString[1]=SBUF;
break;
case?4:
???? RxdIntCnt++;
DispString[2]=SBUF;
break;
case?5:
???? RxdIntCnt++;
DispString[3]=SBUF;
break;
case?6:
???? RxdIntCnt++;
DispString[4]=SBUF;
break;
case?7:
???? RxdIntCnt=0;
DispString[5]=SBUF;
break;
default:
break;
}
}
/*======================延=時=程=序=======================*/
/*==========================================================
;毫秒級延時程序Delayms(uchar
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2307??2011-02-21?02:00??38k單片機紅外發送\38k
?????文件????????199??2011-02-21?02:00??38k單片機紅外發送\38k.hex
?????文件?????????58??2011-02-21?02:00??38k單片機紅外發送\38k.lnp
?????文件???????4774??2011-02-21?02:00??38k單片機紅外發送\38k.M51
?????文件???????1281??2011-02-21?02:05??38k單片機紅外發送\38k.Opt
?????文件???????7123??2011-02-21?02:00??38k單片機紅外發送\38k.plg
?????文件???????2176??2011-02-21?02:05??38k單片機紅外發送\38k.Uv2
????.......?????????0??2011-02-21?00:06??38k單片機紅外發送\38k_Uv2.Bak
?????文件???????3762??2011-02-20?23:24??38k單片機紅外發送\Rx.c
?????文件????????542??2011-02-21?02:00??38k單片機紅外發送\send38k.c
?????文件???????1790??2011-02-21?02:00??38k單片機紅外發送\send38k.LST
?????文件???????1867??2011-02-21?02:00??38k單片機紅外發送\send38k.OBJ
?????文件???????6376??2005-03-22?15:22??38k單片機紅外發送\STARTUP.A51
?????文件??????14048??2011-02-21?02:00??38k單片機紅外發送\STARTUP.LST
?????文件????????749??2011-02-21?02:00??38k單片機紅外發送\STARTUP.OBJ
?????目錄??????????0??2011-02-21?02:05??38k單片機紅外發送
-----------?---------??----------?-----??----
????????????????47052????????????????????16
評論
共有 條評論