標題:
醫(yī)院叫號系統(tǒng)單片機程序設(shè)計
[打印本頁]
作者:
wkings
時間:
2019-6-25 14:39
標題:
醫(yī)院叫號系統(tǒng)單片機程序設(shè)計
主機通過按鍵完成叫號,數(shù)碼管顯示被叫的號,提醒顧客接受服務(wù);
從機通過串行通信方式完成排隊取號功能;
從機顯示隊列中排在其前面的顧客數(shù);
單片機源程序如下:
#include <reg52.h>
#define LED P2
#define KEY P1
#define DIG P0
unsigned char GetKey(void);
void delay10ms(void);
unsigned char val[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void initSer (void); //串口初始化
unsigned char sendFlag = 0; //未發(fā)送數(shù)據(jù)時
unsigned char receFlag =0; //未接受到數(shù)據(jù)時
unsigned char key=0;
void sendChar(unsigned char sendValue); //發(fā)送一字節(jié)數(shù)據(jù)
void main(void)
{
initSer();
LED=val[key];
while(1)
{
key = GetKey();
while(key) //單片機串口收到任意數(shù)據(jù)后,開始向PC發(fā)送數(shù)據(jù)
{
LED=val[key];
sendChar(key); //發(fā)送數(shù)據(jù)
key=0; //發(fā)完了清標志
}
}
}
void serInt() interrupt 4 //中斷函數(shù)
{
if(RI) //如果收到任意數(shù)據(jù)
{
RI = 0;
P1=SBUF; //數(shù)據(jù)的變化讓led燈直觀反應(yīng)出來
receFlag=1; //修改接受標志,便于主函數(shù)進入while中發(fā)數(shù)據(jù)
}
if(TI)
{
TI = 0; //發(fā)送完一個數(shù)據(jù)
sendFlag = 0; //清標志位
}
}
void sendChar(unsigned char Value) //發(fā)送一個字節(jié)數(shù)據(jù)
{
SBUF = Value;
sendFlag = 1; //設(shè)置發(fā)送標志位,發(fā)一字節(jié)就置位
while(sendFlag); //直到發(fā)完數(shù)據(jù),將sendFlag清零后,才退出sendChar函數(shù)
}
void initSer() //初始化
{
//注意:剛上電時,SCON是為0的
TMOD=TMOD|0x20; //T1定時器模式,工作方式2
TH1=0Xfd; // 256-(11059200/(32*12*9600))
TL1=0xfd;
SM0=0; //屬于SCON寄存器
SM1=1; //串口工作方式1,10位異步,波特率可改
REN=1; //允許串口接收
ES=1; //開串口中斷
EA=1; //開總中斷
TR1=1; //啟動定時器
}
unsigned char GetKey(void)
{
unsigned char hang = 0, lie = 0;
unsigned char keyvalue = 0;
// 第1回合第1步
KEY = 0x0f; // 從IO口輸出,寫IO口
if (KEY != 0x0f)// 從IO口輸入,讀IO口
{
// 讀出的不是0x0f說明有按鍵被按下
// 第1回合第2步:讀出端口從讀出值來判斷是哪一行
delay10ms();
// 第一回合中算出行號
switch (KEY)
{
case 0x0e:hang = 1; break;
case 0x0d: hang = 2; break;
case 0x0b: hang = 3; break;
case 0x07: hang = 4; break;
default: break;
}
// 第2回合第1步
KEY = 0xf0;
if (KEY != 0xf0)
{
switch (KEY)
{
case 0xe0:lie = 1; break;
case 0xd0: lie = 2; break;
case 0xb0: lie = 3; break;
case 0x70: lie = 4; break;
default: break;
}
// 經(jīng)過2個回合后hang和lie都知道了,然后根據(jù)hang和lie去計算鍵值即可
keyvalue = (hang - 1) * 4 + lie;
return keyvalue;
}
}
return 0;
}
void delay10ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=5;c>0;c--)
for(b=4;b>0;b--)
for(a=248;a>0;a--);
}
復(fù)制代碼
所有程序51hei提供下載:
kunkun.zip
(58.49 KB, 下載次數(shù): 27)
2019-6-25 14:38 上傳
點擊文件名下載附件
仿真和程序
下載積分: 黑幣 -5
作者:
yilinghai
時間:
2019-7-1 16:29
里面只有程序嗎?還是仿真加程序的
作者:
wkings
時間:
2021-12-15 08:24
yilinghai 發(fā)表于 2019-7-1 16:29
里面只有程序嗎?還是仿真加程序的
程序仿真都有
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1