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

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
義隆C語言寫的一個簡單小家電控制器
義隆C語言寫的一個簡單小家電控制器
 更新時間:2009-7-20 15:42:00  點擊數:0
【字體: 字體顏色
#include "EM78x156xx.h"

#define DISI()    _asm{disi}
#define ENI()    _asm{eni}
#define SLEP()    _asm{slep}
#define NOP()    _asm{nop}
#define WDTC()  _asm{wdtc}

#define uchar unsigned int
#define uint  unsigned short


#define Key  R53
#define Bz   R51
#define Out  R50
#define Com1 R60
#define Com2 R61
#define Com3 R62
#define Seg1 R63
#define Seg2 R64
#define Seg3 R65
#define Seg4 R66
#define Seg5 R67
#define InCom1 (P6CR|=0x01)
#define InCom2 (P6CR|=0x02)
#define InCom3 (P6CR|=0x04)
#define OutCom1 (P6CR&=0x0E)
#define OutCom2 (P6CR&=0x0D)
#define OutCom3 (P6CR&=0x0B)

bit OkFlag;
bit BzOutFlag;
bit StartFlag;
bit KeyFlag;
uchar Count @0x2F;
uint BzOutTime;
uint TimeFlag;
uchar Minute;
uchar Second;
uchar BiasTime;

const uchar Number1[10]={
0x6F,0x06,0x3D,0x37,0x56,0x73,0x7B,0x26,0xFF,0x77};
const uchar Number2[10]={
0xF7,0x03,0x5E,0x1F,0x8B,0x9D,0xFD,0x13,0xFF,0xBF};



void SysInt(void);
void KeyProcess(void);
void Delayms(uint ms);
void BzOut(void);
void LcdDisplay(uchar Num1,uchar Num2);
void TimeDisplay(void);

void main()
{
SysInt();
while(1)
{
  KeyProcess();
  TimeDisplay();
}
}

void TimeDisplay(void)
{
uchar temp1,temp2;
//Count++;
Out=!StartFlag;
if(BzOutFlag==1)
{
  if((BzOutTime%1000)==0)
  BzOut();
  if(BzOutTime>=20000)
  {
   BzOutTime=0;
   BzOutFlag=0;
  }
  BzOutTime++;
}
if((Count>=249)&&(StartFlag==1))//Count>=249
{
  Count=0;
  if(Second>0)
  Second--;
  if(Second==0)
  {
   if(Minute>0)
   {
    Minute--;
    Second=60;
   }
   else
   {
    StartFlag=0;
    BzOutFlag=1;
    OkFlag=1;
   }
  }
}
if(OkFlag==1)
{
  LcdDisplay(0x0,0x0);
}
else if(Minute>=1)
  {
   if((Minute>=1)&&(Second>0)&&(StartFlag==1))
   {
    temp2=(Minute+1)/10;
    temp1=(Minute+1)%10;
   }
   else
   {
    temp2=Minute/10;
    temp1=Minute%10;
   }
   
   if((StartFlag==1)&&(Count>125))
   {
    LcdDisplay(0x00,0x00);
   }
   else
   {LcdDisplay(Number1[temp1],Number2[temp2]);}
  }
  else
  {
   temp2=Second/10;
   temp1=Second%10;
   LcdDisplay(Number1[temp1],Number2[temp2]);
  }
  

}

void SysInt(void)
{
WDTCR=0;
DISI();
_asm
{
  mov a,@0x44
  contw
}    
ISR=0;
IMR=0x01;
TCC=5;
PHCR=0xFF;
PDCR=0xFF;
P5CR=0x08;
P6CR&=0x07;
InCom1;
InCom2;
InCom3;
Seg1=0;
Seg2=0;
Seg3=0;
Seg4=0;
Seg5=0;
BiasTime=0;
BzOutTime=0;
TimeFlag=0;
OkFlag=0;
StartFlag=0;
BzOutFlag=0;
Count=0;
Second=0;
Minute=0;
Bz=0;
Out=1;
KeyFlag=0;
ENI();
}

void LcdDisplay(uchar Num1,uchar Num2)
{
switch(BiasTime)
{
  case 0:
        OutCom1;
        Com1=1;
        InCom2;
        InCom3;
        if((Num1&0x01)==0)Seg1=1;
        else Seg1=0;
        if((Num1&0x08)==0)Seg2=1;
        else Seg2=0;
        if((Num2&0x01)==0)Seg3=1;
        else Seg3=0;
        if((Num2&0x04)==0)Seg4=1;
        else Seg4=0;
        if((Num2&0x20)==0)Seg5=1;
        else Seg5=0;
        break;
   case 1:  
        OutCom1;
        Com1=0;
        InCom2;
        InCom3;
        if((Num1&0x01)==0)Seg1=0;
        else Seg1=1;
        if((Num1&0x08)==0)Seg2=0;
        else Seg2=1;
        if((Num2&0x01)==0)Seg3=0;
        else Seg3=1;
        if((Num2&0x04)==0)Seg4=0;
        else Seg4=1;
        if((Num2&0x20)==0)Seg5=0;
        else Seg5=1;
        break;
   case 2:
        InCom1;
        OutCom2;
        Com2=1;
        InCom3;
        if((Num1&0x02)==0)Seg1=1;
        else Seg1=0;
        if((Num1&0x10)==0)Seg2=1;
        else Seg2=0;
        if((Num2&0x02)==0)Seg3=1;
        else Seg3=0;
        if((Num2&0x08)==0)Seg4=1;
        else Seg4=0;
        if((Num2&0x40)==0)Seg5=1;
        else Seg5=0;
        break;
   case 3:
        InCom1;
        OutCom2;
        Com2=0;
        InCom3;
        if((Num1&0x02)==0)Seg1=0;
        else Seg1=1;
        if((Num1&0x10)==0)Seg2=0;
        else Seg2=1;
        if((Num2&0x02)==0)Seg3=0;
        else Seg3=1;
        if((Num2&0x08)==0)Seg4=0;
        else Seg4=1;
        if((Num2&0x40)==0)Seg5=0;
        else Seg5=1;
        break;
  case 4:
        InCom1;
        InCom2;
        OutCom3;
        Com3=1;
        if((Num1&0x04)==0)Seg1=1;
        else Seg1=0;
        if((Num1&0x20)==0)Seg2=1;
        else Seg2=0;
        if((Num1&0x40)==0)Seg3=1;
        else Seg3=0;
        if((Num2&0x10)==0)Seg4=1;
        else Seg4=0;
        if((Num2&0x80)==0)Seg5=1;
        else Seg5=0;
        break;
  case 5:
        InCom1;
        InCom2;
        OutCom3;
        Com3=0;
        if((Num1&0x04)==0)Seg1=0;
        else Seg1=1;
        if((Num1&0x20)==0)Seg2=0;
        else Seg2=1;
        if((Num1&0x40)==0)Seg3=0;
        else Seg3=1;
        if((Num2&0x10)==0)Seg4=0;
        else Seg4=1;
        if((Num2&0x80)==0)Seg5=0;
        else Seg5=1;
default:break;
}    
Delayms(1);
BiasTime++;
if(BiasTime>=6)
BiasTime=0;
}

void KeyProcess(void)
{
if((TimeFlag>0)&&(TimeFlag<2000))
{
  OkFlag=0;
  TimeFlag++;
  if(TimeFlag>=2000)
  StartFlag=1;
}

if((Key==0)&&(KeyFlag==0)&&(StartFlag==0))
{
  TimeFlag=1;
  Minute++;
  if(Minute>99)
  Minute=0;
  if(OkFlag==1)
  {
   //OkFlag=0;
  // Minute=0;
   SysInt();
  }
  KeyFlag=1;
}
else
{
  if(Key==1)
  KeyFlag=0;
  
  if((Key==0)&&(KeyFlag==0)&&(StartFlag==1))
  {
   SysInt();
   KeyFlag=1;
  }
}
}

void BzOut(void)
{
uchar i,j;
for(i=0;i<150;i++)
{
  Bz=!Bz;
  for(j=0;j<58;j++)
  {NOP();NOP();}
}
  /*Delayms(50);
  for(i=0;i<100;i++)
{
  Bz=!Bz;
  for(j=0;j<50;j++)
  {NOP();NOP();}
}*/
  Bz=0;
}

void Delayms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++)
NOP();
}


void _intcall interrupt_l(void) @0x08:low_int 0
{
  _asm
   {
      //save A --> 0x1F ; R3 --> 0x3E (ram bank 1); R4 --> 0x3F (ram bank 1)
      MOV 0X1F,A   ;backup A to 0x1F
      SWAPA 0X04   ;backup R4 to 0x3F at bank 3
      MOV 0X3F,A   ;backup R4 to 0x3F at bank 3
      SWAPA 0X03   
      MOV 0X3E,A   ;backup R3 to 0x3E at bank 3
   }     
}
void _intcall interrupt(void) @int 0
{
if(TCIF==0)return;
DISI();
ISR=0;
  _asm
{
  mov a,@0x44
  contw
}    
TCC=5;
_asm
{
  SWAPA 0X3E   ;restore R3
  MOV 0X03,A
  SWAPA 0X3F   ;restore R4
  MOV 0X04,A
  SWAP 0X1F    ;restore A
  SWAPA 0X1F
  }
  _asm{INC 0X2F}
ENI();
}
  • 上一篇: EMC單片機|EMC單片機開發工具|EMC單片機代理
  • 下一篇: Em78p458/9比較器功能測試程序
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

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

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

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 高雄市| 南涧| 夏津县| 托里县| 航空| 福州市| 准格尔旗| 武乡县| 巧家县| 镇江市| 中江县| 墨脱县| 师宗县| 澄城县| 南漳县| 广昌县| 苏尼特右旗| 云浮市| 黄梅县| 徐水县| 贺兰县| 邻水| 二连浩特市| 东阳市| 宜君县| 临江市| 安顺市| 科技| 天津市| 宣城市| 石狮市| 保定市| 会东县| 泽库县| 德格县| 图木舒克市| 贵州省| 中山市| 客服| 志丹县| 南溪县|