#include <reg52.h> //調用單片機頭文件
#define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
sbit rs=P2^6;
sbit rw=P2^5;
sbit e =P2^7;
sbit beep = P1^5; //蜂鳴器IO口定義
sbit key_quxiao = P3^3; //取消鍵IO口定義
bit flag_300ms ; //300ms的標志位
sbit led1 = P2^0; //第1號病房指示燈
sbit led2 = P2^1; //第2號病房指示燈
sbit led3 = P2^2; //第3號病房指示燈
sbit key1 = P3^1; //按鍵1定義
sbit key2 = P3^0; //按鍵2定義
sbit key3 = P3^2; //按鍵3定義
sbit key4 = P3^3; //按鍵4定義
uchar dis_lcd[8]; //3個病房數據顯示的緩沖區
uchar br_geshu; //報警病人數
uchar key_can; //按鍵值
/********************************************************************
* 名稱 : 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)
{
rs=0; //寫命令
rw=0; //對1602寫操作
P0=com; //P0口對1602寫命令數據
delay_uint(25);
e=1; //e=1使能信號
delay_uint(100); //延時一下等1602完成操作
e=0;
}
/***********************lcd1602寫數據函數************************/
void write_data(uchar dat)
{
rs=1; //寫數據
rw=0; //對1602寫操作
P0=dat; //P0口對1602寫數據
delay_uint(25);
e=1; //e=1使能信號
delay_uint(100); //延時一下等1602完成操作
e=0;
}
/***********************lcd1602上顯示這字符串函數************************/
void write_string(uchar hang,uchar add,uchar *p)
{
if(hang==1)
write_com(0x80+add); //1602寫第一行的地址
else
write_com(0x80+0x40+add); //1602寫第二行的地址
while(1)
{
if(*p == '\0') break; //\0字符串的結尾標志 break結束while循環 結束寫字符
write_data(*p); //寫數據
p++; //指針地址加1
}
}
/***********************lcd1602上顯示這字符函數************************/
void write_string_ge(uchar hang,uchar add,uchar *p,uchar ge)
{
uchar i;
if(hang==1)
write_com(0x80+add); //1602寫第一行的地址
else
write_com(0x80+0x40+add); //1602寫第二行的地址
for(i=0;i<ge;i++)
{
write_data(0x30+*p); //寫數據
p++; //指針地址加1
}
}
/***********************lcd1602初始化設置************************/
void init_1602() //lcd1602初始化設置
{
write_com(0x38); //顯示模式設置:16×2顯示,5×7點陣,8位數據接口 不檢測忙信號
write_com(0x0c); //開顯示 不顯示光標
write_com(0x06); //當寫一個字符是,地址指針加 1
write_string(1,0," bingfang hujiao "); //初始化顯示
write_string(2,0," wu bingren "); //初始化顯示
}
/*********************定時器0、定時器1初始化******************/
void time0_init()
{
EA = 1; //開總中斷
TMOD = 0X01; //定時器0、工作方式1
ET0 = 1; //開定時器0中斷
TR0 = 1; //允許定時器0定時
TH0 = 0X3C;
TL0 = 0XB0; //50ms
}
/********************獨立按鍵程序*****************/
void key() //獨立按鍵程序
{
key_can = 0; //按鍵值還原
if((key1 == 0)&&(led1==1)) //按鍵按下
{
delay_1ms(1); //延時按鍵消抖動
if(key1 == 0) //確認是按鍵按下
key_can = 1; //得到按鍵值
}
if((key2 == 0)&&(led2==1)) //按鍵按下
{
delay_1ms(1); //延時按鍵消抖動
if(key2 == 0) //確認是按鍵按下
key_can = 2; //得到按鍵值
}
if((key3 == 0)&&(led3==1)) //按鍵按下
{
delay_1ms(1); //延時按鍵消抖動
if(key3 == 0) //確認是按鍵按下
key_can = 3; //得到按鍵值
}
}
void key_qx() //取消按鍵程序
{
if(key_quxiao == 0) //按鍵按下
{
delay_1ms(1); //延時按鍵消抖動
if(key_quxiao == 0)
{ //確認是按鍵按下
key_can = 4; //得到按鍵值
while(key_quxiao == 0); //等待按鍵松手
}
}
}
pdf格式的原理圖:
病房呼叫.pdf
(218.6 KB, 下載次數: 4)
2023-2-15 14:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|