男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
多機紅外通信發送端(C程序代碼)
多機紅外通信發送端(C程序代碼)
 更新時間:2008-7-26 20:29:41  點擊數:2
【字體: 字體顏色

/****************************************************************
*文件名: Host.C
*版權:  www.zlgmcu.com
*日期:  16:27 04-3-16
*功能:  多機紅外通信發送端程序代碼
****************************************************************/
#include "reg932.h"
#define uchar unsigned char

sbit KEY1=P0^0;     //定義KEY1
sbit KEY2=P0^1;     //定義KEY2
     
sbit Infr=P0^3;     //定義紅外輸出端口
//--------------------------------------
void CCU_Init();     //CCU初始化
void KeyISR_Init();    //鍵盤中斷初始化
void ReadKey();     //判斷按鍵
void Power_Down();    //完全掉電

void StartDevice01();   //啟動設備1(燈)
void StartDevice02();   //啟動設備2(門/窗)
void SendHead();     //發送幀頭
void SendData(uchar Data);  //發送數據

void delay400us();    //延時400us
void delayms(uchar i);   //ms級延時
//--------------------------------------
void KEY_ISR() interrupt 7{
 EA=0;       //關中斷
 
 PCONA=0x00;      //功能模塊上電
 CCU_Init();      //CCU模塊初始化

 delayms(10);     //延時10ms
 ReadKey();      //判斷按鍵

 KBCON=0x00;      //清鍵盤中斷標志
 delayms(50);     //延時50ms
 EA=1;       //開中斷
}

//--------------------------------------
main()
{
 P0M1=0x00;      //設置P0口為準雙向
 P0M2=0x00;
 P2M1=0x40;      //設置P26為開漏      
 P2M2=0x40;
 CCU_Init();      //CCU初始化
 KeyISR_Init();     //鍵盤初始化
 while(1)
 {
  Power_Down();    //完全掉電
 }
}
//--------------------------------------
//功能:進入掉電模式
//--------------------------------------
void Power_Down()
{
 PCONA=0xFF;      //外部功能模塊掉電
 PCON=0x03;      //進入掉電模式
}
//-------------------------------------------------------------
//功能: CCU模塊初始化,使OCA(P2.7)輸出38KHz,50%占空比的PWM波,
//使用內部RC振蕩器時:CCU頻率=((7375000/2)/6)*32=9.833MHz
//定時器重裝值=CCU頻率/紅外線載頻=9833333/38000=258.772=0x102
//-------------------------------------------------------------
void CCU_Init()
{

    TOR2H=0x02;                     //定時器重裝值
    TOR2L=0x05;
    OCRAH=0x01;                     //(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比為50%
    OCRAL=0x02;
    TCR21=0x85;                     //PLL預分頻為5+1
    CCCRA=1;                        //非反相的PWM在比較匹配時置位,在CCU定時器向下溢出時清0

    PLLEN=1;      // 啟動 PLL
 OCA=1;
    while(PLLEN==0);
    TCR20=0x82;      // 設置輸出模式,非反相PWM

}
//--------------------------------------
//功能:鍵盤中斷初始化
//--------------------------------------
void KeyISR_Init()
{
 KBMASK=0x03;     //設置P01->P00為中斷源
 KBCON=0x00;      //清除鍵盤中斷標志
 EKBI=1;       //鍵盤中斷允許
 EA=1;       //開中斷
}
//--------------------------------------
//功能:鍵盤判斷
//--------------------------------------
void ReadKey()

 delayms(12);     //延時去抖動

 if(KEY1==0)      //等待KEY1按下
 {
  while(KEY1==0);    //等待KEY1為1
  StartDevice01();   //啟動設備1(燈)
 }
 else if(KEY2==0)    //等待KEY2按下
 {
  while(KEY2==0);    //等待KEY2為1
  StartDevice02();   //啟動設備2(門/窗)
 }
}

//--------------------------------------
//功能:啟動設備1(門/窗) 
//--------------------------------------
void StartDevice01()    
{
 SendHead();      //發送幀頭
 SendData(1);     //發送數據“1”,
}
//--------------------------------------
//功能:啟動設備2(門/窗)
//--------------------------------------
void StartDevice02()
{
 SendHead();      //發送幀頭
 SendData(2);     //發送數據“2”,
}
//--------------------------------------
//功能:發送幀頭
//--------------------------------------
void SendHead()
{
 Infr=0;       //將Infr拉為低電平
 delayms(50);
 Infr=1;       //將Infr拉為高電平
 delayms(10);

 Infr=0;       //將Infr拉為低電平
 delayms(1);
 Infr=1;       //將Infr拉為高電平
 delayms(1);
 Infr=0;       //將Infr拉為低電平
 delayms(1);
}
//--------------------------------------
//功能:發送數據,從高位到低位依次發送8個位
//入口參數:要發送的數據
//--------------------------------------
void SendData(uchar  Data)
{
 uchar Temp;
 uchar i=8;
 while(i>0)
 {
  Temp=Data&0x80;    //取欲發送數的最高位
  if(Temp==0x80)    //對最高位進行判斷.
  { 
   Infr=1;     //為1則將Infr拉高
  }
  else
  {
   Infr=0;     //為0,則將Infr拉低
  }
  
  i--;
  Data=Data<<1;    //循環移位
  delay400us();    //延時
 }
}
//--------------------------------------
//在內部RC作用的情況下,延時1000.9us
//--------------------------------------
void delayms(uchar i)
{
 int j;
 while(i>0)
 {
  for(j=0;j<670;j++);
  i--;
 }
}
//---------------------------------------
//在內部RC作用的情況下,延時 401us;
//---------------------------------------
void delay400us()
{
 int i;
 for(i=0;i<283;i++);
}//---------------------------------------

  • 上一篇: 多機紅外通信發送端程序代碼(匯編)
  • 下一篇: 多機紅外通信接收端(匯編程序代碼)
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發消息66821730(技術支持)點擊這里給我發消息66821730(廣告投放) 點擊這里給我發消息41031197(編輯) 點擊這里給我發消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業自行提供,該企業負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 海丰县| 祁连县| 广南县| 邳州市| 广饶县| 万载县| 曲沃县| 衡南县| 苏尼特左旗| 营山县| 安化县| 竹溪县| 娄底市| 通辽市| 图木舒克市| 天等县| 阆中市| 西乌珠穆沁旗| 东兰县| 淮南市| 师宗县| 永定县| 尖扎县| 乌苏市| 视频| 镶黄旗| 青河县| 万盛区| 绵竹市| 文昌市| 湖州市| 临清市| 漳州市| 缙云县| 勐海县| 昌邑市| 鹿邑县| 远安县| 新邵县| 平和县| 无极县|