久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1419|回復(fù): 1
收起左側(cè)

單片機(jī)AVR單片機(jī)病房控制系統(tǒng)設(shè)計(jì)+源程序

[復(fù)制鏈接]
ID:190577 發(fā)表于 2023-11-30 20:43 | 顯示全部樓層 |閱讀模式
一、系統(tǒng)方案
設(shè)計(jì)一個(gè)可容8張床位的病房呼叫系統(tǒng)。要求每個(gè)床位都有一個(gè)按鈕,當(dāng)患者需要呼叫護(hù)士時(shí),按下按鈕,此時(shí)護(hù)士值班室內(nèi)的呼叫系統(tǒng)板上顯示該患者的床位號(hào),并蜂鳴器報(bào)警。當(dāng)護(hù)士按下“響應(yīng)”鍵時(shí),結(jié)束當(dāng)前呼叫。
1.jpg

二、硬件設(shè)計(jì)
原理圖如下:
2.jpg

三、單片機(jī)軟件設(shè)計(jì)
1、首先是系統(tǒng)初始化
//LCD端口初始化
void LCDPort_Init(void)
{   
     LCD_BUS = 0XFF;
         LCD_BUS_Direction_REG =0XFF;   //LCD數(shù)據(jù)端口設(shè)置為輸出
        
         LCD_ControlPort_SET;          //RS RW EN腳均設(shè)置為輸出        
          LCD_ControlPort_CLR;          //RW RW EN低電平
}
//LCD寫指令
void Write_Com(unsigned char LCD_Com)
{
  
        
         RS_CLR; //RS=0,寫指令
         RW_CLR; //RW=0,寫命令
         EN_SET; //E=1,寫操作        
         LCD_BUS=LCD_Com;    //數(shù)據(jù)送往數(shù)據(jù)端口?
         _delay_ms(1);    //這個(gè)延時(shí)非常重要,結(jié)合時(shí)序圖來理解,可以跟送數(shù)據(jù)順序調(diào)換
         EN_CLR;// E=0,下角
     _delay_ms(1);  
}
2、液晶顯示程序
//LCD端口初始化
void LCDPort_Init(void)
{   
     LCD_BUS = 0XFF;
         LCD_BUS_Direction_REG =0XFF;   //LCD數(shù)據(jù)端口設(shè)置為輸出
        
         LCD_ControlPort_SET;          //RS RW EN腳均設(shè)置為輸出        
          LCD_ControlPort_CLR;          //RW RW EN低電平
}
//LCD寫指令
void Write_Com(unsigned char LCD_Com)
{
  
        
         RS_CLR; //RS=0,寫指令
         RW_CLR; //RW=0,寫命令
         EN_SET; //E=1,寫操作        
         LCD_BUS=LCD_Com;    //數(shù)據(jù)送往數(shù)據(jù)端口?
         _delay_ms(1);    //這個(gè)延時(shí)非常重要,結(jié)合時(shí)序圖來理解,可以跟送數(shù)據(jù)順序調(diào)換
         EN_CLR;// E=0,下角
     _delay_ms(1);  
}
3、按鍵程序
//按鍵處理函數(shù)
void key_with(void)
{
        uchar i;
        if(key_can <= 8)
        {
                if(key_can == 1)
                L1_0 ;          //1號(hào)病房燈亮
        if(key_can == 2)
                L2_0 ;          //2號(hào)病房燈亮
                if(key_can == 3)
                L3_0 ;          //3號(hào)病房燈亮
                if(key_can == 4)
                L4_0;          //4號(hào)病房燈亮
     if(key_can == 5)
        L5_0 ;          //5號(hào)病房燈亮
        if(key_can == 6)
        L6_0 ;          //6號(hào)病房燈亮
        if(key_can == 7)
        L7_0 ;          //7號(hào)病房燈亮
}
4、核心算法程序
void  main(void)
{
        unsigned char key =1;
        LCDPort_Init();
    LCD_Init();
         DDRB=0x7F;
    PORTB=0xff;
   DDRC=0xFF;
    PORTC=0xff;
    DDRD=0x00;
    PORTD=0xff;
    DDRA=0xFF;
    PORTA=0xff;
        write_string(1,0,Timer_buf);               
        write_string(2,0," wu bingrenhujiao");           
           
        while(1)
        {
            Timer_buf[13] = br_geshu%10+47;
                                   
         write_string(1,0,Timer_buf); //寫顯示
                if(br_geshu > 1)
                                BEEP_0 ;   //蜂鳴器報(bào)警
                else
                                        BEEP_1;       //取消報(bào)警
       key_with();
           if((PIND&0x01)==0x00)    // 按鍵1按下         
           {
                  _delay_ms(10);  // 延時(shí)消抖
                   if((PIND&0x01)==0x00)   // 確定按鍵依然1按下     
                   {
                     while((PIND&0x01)!=0X01); // 判斷手松開
                     key_can = 1;
                   }               
                }
                  if((PIND&0x02)==0x00)    // 按鍵1按下         
           {
                  _delay_ms(10);  // 延時(shí)消抖
                   if((PIND&0x02)==0x00)   // 確定按鍵依然1按下     
                   {
                     while((PIND&0x02)!=0X02); // 判斷手松開
                     key_can = 2;
                   }               
                }
                  if((PIND&0x04)==0x00)    // 按鍵1按下         
           {
                  _delay_ms(10);  // 延時(shí)消抖
                   if((PIND&0x04)==0x00)   // 確定按鍵依然1按下     
                   {
                     while((PIND&0x04)!=0X04); // 判斷手松開
                     key_can = 3;
                   }               
                }
      if((PIND&0x08)==0x00)    // 按鍵1按下         
           {
                  _delay_ms(10);  // 延時(shí)消抖
                   if((PIND&0x08)==0x00)   // 確定按鍵依然1按下     
                   {
                     while((PIND&0x08)!=0X08); // 判斷手松開
                     key_can = 4;
                   }               
                }
                  if((PIND&0x10)==0x00)    // 按鍵1按下         
           {
                  _delay_ms(10);  // 延時(shí)消抖
                   if((PIND&0x10)==0x00)   // 確定按鍵依然1按下     
                   {
                     while((PIND&0x10)!=0X10); // 判斷手松開
                     key_can = 5;
                   }               
                }
                  if((PIND&0x20)==0x00)    // 按鍵1按下         
           {
                  _delay_ms(10);  // 延時(shí)消抖
                   if((PIND&0x20)==0x00)   // 確定按鍵依然1按下     
                   {
                     while((PIND&0x20)!=0X20); // 判斷手松開
                     key_can = 6;
                   }               
                }
                  if((PIND&0x40)==0x00)    // 按鍵1按下         
           {
                  _delay_ms(10);  // 延時(shí)消抖
                   if((PIND&0x40)==0x00)   // 確定按鍵依然1按下     
                   {
                     while((PIND&0x40)!=0X40); // 判斷手松開
                     key_can = 7;
                   }               
                }
                  if((PIND&0x80)==0x00)    // 按鍵1按下         
           {
                  _delay_ms(10);  // 延時(shí)消抖
                   if((PIND&0x80)==0x00)   // 確定按鍵依然1按下     
                   {
                     while((PIND&0x80)!=0X80); // 判斷手松開
                     key_can = 8;
                   }               
                }  
                if((PINB&0x80)==0x00)    // 按鍵1按下         
           {
                  _delay_ms(10);  // 延時(shí)消抖
                   if((PINB&0x80)==0x00)   // 確定按鍵依然1按下     
                   {
                     while((PINB&0x80)!=0X80); // 判斷手松開
                     key_can = 9;
                   }               
                }  
        }
}

四、  proteus仿真設(shè)計(jì)
Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒有硬件平臺(tái)的基礎(chǔ)上通過自身的軟件仿真出硬件平臺(tái)的運(yùn)行情況,這樣就可以通過軟件仿真來驗(yàn)證我們?cè)O(shè)計(jì)的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達(dá)到我們?cè)O(shè)定的目的,避免我們搭建實(shí)物的時(shí)候,如果當(dāng)初選擇的方案有問題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測(cè)試,這樣會(huì)浪費(fèi)人力和物力,也給開發(fā)者帶來一定困惑,Proteus仿真軟件就很好的解決這個(gè)問題,我們?cè)谠O(shè)計(jì)之初,就使用該軟件進(jìn)行模擬仿真,測(cè)試,選擇滿足我們?cè)O(shè)計(jì)的最優(yōu)方案。最后根據(jù)測(cè)試沒問題的仿真圖紙,焊接實(shí)物,調(diào)試,最終完成本設(shè)計(jì)的作品。
回復(fù)

使用道具 舉報(bào)

ID:275826 發(fā)表于 2023-12-10 19:26 | 顯示全部樓層
你這個(gè)不實(shí)用,要采用二線制,所有呼叫器并聯(lián)在雙線
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品亚洲日本在线观看 | 欧美精品一二区 | 日韩精品一区二区三区高清免费 | 国产aⅴ爽av久久久久久久 | 国产精品久久久久久久久久免费看 | 久久久新视频 | 欧美三级在线 | 欧美乱淫视频 | 亚洲日韩中文字幕一区 | 成人欧美一区二区三区在线观看 | 国产中文原创 | 99re66在线观看精品热 | 亚洲久久一区 | 人人鲁人人莫人人爱精品 | 免费不卡av| 在线观看亚洲 | 精品久久网 | 午夜专区 | 久久久观看 | 午夜精品一区二区三区三上悠亚 | 日韩欧美专区 | 久色 | 免费日本视频 | 成人网av| 成人av影院| 欧美在线色| 日韩中文字幕在线观看 | 超碰97人人人人人蜜桃 | 91黄在线观看 | 天天夜夜操 | 欧美精品一区在线 | 国产欧美综合在线 | 久久精品国产免费 | 日韩视频一区二区三区 | 日本电影韩国电影免费观看 | 精品中文字幕一区二区三区 | 91免费入口 | 999久久久| 日本韩国欧美在线观看 | 欧美色综合一区二区三区 | 黑人一级黄色大片 |