欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1903|回復: 0
打印 上一主題 下一主題
收起左側(cè)

單片機病房呼叫系統(tǒng)代碼

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:992390 發(fā)表于 2021-12-14 20:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "reg52.h"        //頭文件
typedef unsigned char u8;
typedef unsigned int u16;

sbit beep=P3^7;     //蜂鳴器對應(yīng)的IO口
sbit LSA=P2^2;     //138譯碼器A口輸入
sbit LSB=P2^3;     //138譯碼器B口輸入
sbit LSC=P2^4;     //138譯碼器C口輸入
sbit K1=P3^1;     //獨立按鍵K1,用于模擬護士的"響應(yīng)"操作

#define GPIO_KEY P1     //定義P1口,用于矩陣按鍵掃描
#define GPIO_DIG P0     //定義P0口,用于數(shù)碼管顯示

u8 KeyValue;         //全局變量病房號

u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //數(shù)碼管0-9的數(shù)字顯示

void delay(u16 i)     //延時子程序
{
       while(i--);
}
void KeyDown()        //矩陣按鍵掃描子程序
{
    /* 由于開發(fā)板的矩陣按鍵是4*4,按鍵掃描先是列掃描,設(shè)置為每一列的第一行,然后再行掃描,如果是第一行就保持原值,若是第2行,與第1行相差4
    ,則在原值的基礎(chǔ)上再加4,得到最終結(jié)果,依次類推第3、4行    */
    u8 a=0;
       GPIO_KEY=0x0f;           //高4位置0,低4位置1,進行列掃描
    if(GPIO_KEY!=0x0f)      //有按鍵按下
    {
      delay(1000);          //消除按鍵抖動
      if(GPIO_KEY!=0x0f)   //再次檢測是否有按鍵按下
      {
        GPIO_KEY=0x0f;      //高4位置0,低4位置1,列掃描
        switch(GPIO_KEY)
        {
          case(0x07):KeyValue=1;break;    //檢測到第1列有按鍵按下,令KeyValue=1
          case(0x0b):KeyValue=2;break;    //檢測到第2列有按鍵按下,令KeyValue=2
          case(0x0d):KeyValue=3;break;    //檢測到第3列有按鍵按下,令KeyValue=3
          case(0x0e):KeyValue=4;break;    //檢測到第4列有按鍵按下,令KeyValue=4      
        }
       GPIO_KEY=0xf0;       //高4位置1,低4位置0,行掃描
       switch(GPIO_KEY)            
        {
        
          case(0x70):KeyValue=KeyValue;break;      //檢測到第1行有按鍵按下,則令KeyValue=KeyValue
          case(0xb0):KeyValue=KeyValue+4;break;      //檢測到第2行有按鍵按下,則令KeyValue=KeyValue+4
          case(0xd0):KeyValue=KeyValue+8;break;      //檢測到第3行有按鍵按下,則令KeyValue=KeyValue+8
          case(0xe0):KeyValue=KeyValue+12;break;  //檢測到第4行有按鍵按下,則令KeyValue=KeyValue+12         
        }
        while((a<50)&&(GPIO_KEY!=0xf0))     //按鍵消抖
        {
          delay(1000);
          a++;
        }
      }
    }
}

void main()
{
     
     while(1)      //死循環(huán),令系統(tǒng)一直工作
       {        
         KeyDown();       //調(diào)用矩陣按鍵掃描子程序
        
         if((KeyValue>0)&&(KeyValue<10))    //掃描得到的結(jié)果小于10時
         {
           LSA=0;
           LSB=0;
           LSC=0;       //輸入138譯碼器,選中/Y0,第一個數(shù)碼管(個位)
           GPIO_DIG=smg[KeyValue];     //顯示數(shù)值,即病房號
           delay(1000);                 //延時
           beep=~beep;                 
           delay(100);                   //給蜂鳴器一個脈沖,使其工作,進行呼叫
         }
         
        if((KeyValue>=10))        //掃描得到的結(jié)果大于等于10時
        {
           LSA=0;        //數(shù)碼管動態(tài)顯示結(jié)果
           LSB=0;
           LSC=0;       //輸入138譯碼器,選中/Y0,第一個數(shù)碼管(個位)
           GPIO_DIG=smg[KeyValue%10];  //得到結(jié)果與10相除,取余數(shù),即個位數(shù)
           delay(100);
           GPIO_DIG=0x00;     //消除殘影

           LSA=1;
           LSB=0;
           LSC=0;          //輸入138譯碼器,選中/Y1,第二個數(shù)碼管(十位)
           GPIO_DIG=smg[KeyValue/10];     //得到結(jié)果與10相除,取商,即十位數(shù)
           delay(100);
           GPIO_DIG=0x00;       //消除殘影

           delay(1000);
           beep=~beep;
           delay(100);           //給蜂鳴器一個脈沖,使其工作,進行呼叫
        }
         if(K1==0)               //獨立按鍵K1按下,即護士"響應(yīng)"
        {
           delay(1000);           //消除按鍵抖動
           if(K1==0)
           {
             KeyValue=0;        //確定K1按下,護士"響應(yīng)",使數(shù)碼管顯示數(shù)值置零,恢復初始狀態(tài)   
           }
           while(!K1);            //按鍵松開,進行系統(tǒng)重置操作
           LSA=1;                //恢復開始狀態(tài)
           LSB=1;
           LSC=1;
           GPIO_DIG=smg[KeyValue];     //選中最后一個數(shù)碼管置0,表示初始狀態(tài)
        }                  
       }
}


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表