亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機C51病床呼叫系統源程序
[打印本頁]
作者:
chaochao1ya
時間:
2021-4-14 17:58
標題:
單片機C51病床呼叫系統源程序
系統是基于51系列的單片機設計的病床呼叫系統。該系統以STC89C52單片機為核心輔以矩陣鍵盤、LCD1602示電路和部分簡單模擬和數字電路組成的能夠實現病人和醫護人員之間信息的傳遞。在該設計中每個病房都有一個按鍵,當患者有需要時,按下按鍵,此時 值班室的顯示屏可顯示此患者的床位號,多人使用時可實現循環顯示,醫護人員按下“響應”鍵取消當前呼叫。此系統能夠為醫院提供一個成本低、效率高、操作方便和易于安裝維護的快捷系統。
單片機源程序如下:
#include <reg52.h> //調用單片機頭文件
#define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
uchar code table_num[]="0123456789abcdefg";
sbit rs=P2^7; //寄存器選擇信號 H:數據寄存器 L:指令寄存器
sbit rw=P2^6; //寄存器選擇信號 H:數據寄存器 L:指令寄存器
sbit e =P2^5; //片選信號 下降沿觸發
sbit beep = P2^4;
sbit key_quxiao = P2^0; //取消鍵
uchar i;
bit flag_300ms ; //300ms的標志位
sbit led1 = P1^0; //第1號病房指示燈
sbit led2 = P1^1; //第2號病房指示燈
sbit led3 = P1^2; //第3號病房指示燈
sbit led4 = P1^3; //第4號病房指示燈
sbit led5 = P1^4; //第5號病房指示燈
sbit led6 = P1^5; //第6號病房指示燈
sbit led7 = P1^6; //第7號病房指示燈
sbit led8 = P1^7; //第8號病房指示燈
uchar dis_lcd[8]; //8個病房數據顯示的緩沖區
uchar br_geshu; //報警病人數
/********************************************************************
* 名稱 : delay_1ms()
* 功能 : 延時1ms函數
* 輸入 : q
* 輸出 : 無
***********************************************************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/***********************延時函數************************/
void delay_uint(uint q)
{
while(q--);
}
/***********************lcd1602寫命令函數************************/
void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_uint(3);
e=1;
delay_uint(25);
e=0;
}
/***********************lcd1602寫數據函數************************/
void write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_uint(3);
e=1;
delay_uint(25);
e=0;
}
/***********************lcd1602上顯示這字符函數************************/
void write_string(uchar hang,uchar add,uchar *p)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
while(1)
{
if(*p == '\0') break;
write_data(*p);
p++;
}
}
/***********************lcd1602上顯示這字符函數************************/
void write_string_ge(uchar hang,uchar add,uchar *p,uchar ge)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
for(i=0;i<ge;i++)
write_data(*p++);
}
/***********************lcd1602初始化設置************************/
void init_1602() //lcd1602初始化設置
{
write_com(0x38); //
write_com(0x0c);
write_com(0x06);
delay_uint(1000);
write_string(1,0," bingfang hujiao ");
write_string(2,0," wu bingren ");
}
/*********************定時器0初始化******************/
void time0_init()
{
EA = 1; //開總中斷
TMOD = 0X01; //定時器0、工作方式1
ET0 = 1; //開定時器0中斷
TR0 = 1; //允許定時器0定時
}
/********************獨立按鍵程序*****************/
uchar key_can; //按鍵值
void key() //獨立按鍵程序
{
if((P3 & 0xff) != 0xff) //按鍵按下
{
delay_1ms(1); //按鍵消抖動
if((P3 & 0xff) != 0xff)
{ //確認是按鍵按下
switch(P3 & 0xff)
{
case 0xfe: key_can = 1; break; //得到按鍵值
case 0xfd: key_can = 2; break; //得到按鍵值
case 0xfb: key_can = 3; break; //得到按鍵值
case 0xf7: key_can = 4; break; //得到按鍵值
case 0xef: key_can = 5; break; //得到按鍵值
case 0xdf: key_can = 6; break; //得到按鍵值
case 0xbf: key_can = 7; break; //得到按鍵值
case 0x7f: key_can = 8; break; //得到按鍵值
}
}
}
}
void key_qx() //取消按鍵程序
{
key_quxiao = 1; //對應的按鍵IO口輸出為1
if(key_quxiao == 0) //按鍵按下
{
delay_1ms(1); //按鍵消抖動
if((key_quxiao == 0))
{ //確認是按鍵按下
key_can = 9;
}
}
}
/**********************按鍵處理函數************************/
void key_with()
{
uchar i;
if(key_can <= 8)
{
if(key_can == 1)
led1 = 1; //1號病房燈亮
if(key_can == 2)
led2 = 1; //2號病房燈亮
if(key_can == 3)
led3 = 1; //3號病房燈亮
if(key_can == 4)
led4 = 1; //4號病房燈亮
if(key_can == 5)
led5 = 1; //5號病房燈亮
if(key_can == 6)
led6 = 1; //6號病房燈亮
if(key_can == 7)
led7 = 1; //7號病房燈亮
if(key_can == 8)
led8 = 1; //8號病房燈亮
if(br_geshu < 8)
{
if(br_geshu == 0) //第一次清除顯示屏
write_string(2,0," ");
br_geshu ++; //呼叫病人的人數加1
dis_lcd[0] = table_num[key_can] ; //把病人的號碼保存起來
for(i=7;i>0;i--)
dis_lcd[i] = dis_lcd[i-1] ; //把病人的數據向后移一位
write_string_ge(2,0,dis_lcd,br_geshu); //顯示出來
}
}
if(key_can == 9) //取消鍵的處理
{
if(br_geshu > 0)
{
if(dis_lcd[br_geshu] == '1')
led1 = 0; //1號病房燈滅
if(dis_lcd[br_geshu] == '2')
led2 = 0; //2號病房燈滅
if(dis_lcd[br_geshu] == '3')
led3 = 0; //3號病房燈滅
if(dis_lcd[br_geshu] == '4')
led4 = 0; //4號病房燈滅
if(dis_lcd[br_geshu] == '5')
led5 = 0; //5號病房燈滅
if(dis_lcd[br_geshu] == '6')
led6 = 0; //6號病房燈滅
if(dis_lcd[br_geshu] == '7')
led7 = 0; //7號病房燈滅
if(dis_lcd[br_geshu] == '8')
led8 = 0; //8號病房燈滅
dis_lcd[br_geshu] = ' ';
br_geshu --; //呼叫病人的人數減1
write_string_ge(2,0,dis_lcd,br_geshu);
if(br_geshu == 0) //取消到最后一次清顯示屏
{
write_string(2,0," wu bingren ");
}
}
}
}
/*****************主函數********************/
void main()
{
time0_init(); //初始化定時器
init_1602(); //lcd1602初始化
while(1)
{
key(); //獨立按鍵程序
key_qx(); //取消按鍵程序
key_with();
if(flag_300ms == 1)
{
flag_300ms = 0;
if(br_geshu > 0)
beep = ~beep; //蜂鳴器報警
else
beep = 1; //取消報警
}
}
}
/**************定時器0中斷程序*****************/
void time0() interrupt 1
{
uchar value;
TH0 = 0X3C;
TL0 = 0XB0; //50ms
value ++;
if(value >= 6) //300ms
{
value = 0;
flag_300ms = 1;
}
}
復制代碼
hex文件:
單片機病房呼叫系統.rar
(26.87 KB, 下載次數: 20)
2021-4-14 17:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
51hei團團
時間:
2021-4-14 21:55
可惜沒有原理圖
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1