|
單片機(jī)病床呼叫裝置仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.png (49.1 KB, 下載次數(shù): 46)
下載附件
2018-5-31 13:52 上傳
2.png (51.16 KB, 下載次數(shù): 52)
下載附件
2018-5-31 13:52 上傳
3.png (50.89 KB, 下載次數(shù): 43)
下載附件
2018-5-31 13:52 上傳
4.png (51.72 KB, 下載次數(shù): 46)
下載附件
2018-5-31 13:52 上傳
5.png (21.05 KB, 下載次數(shù): 53)
下載附件
2018-5-31 13:52 上傳
6.png (40 KB, 下載次數(shù): 37)
下載附件
2018-5-31 13:52 上傳
單片機(jī)源程序如下:
- #include<reg52.h>
- #define uc unsigned char
- #define ui unsigned int
- sbit RS=P1^4;
- sbit RW=P1^5;
- sbit E=P1^6;
- sbit D0=P1^3;
- sbit D1=P1^2;
- sbit D2=P1^1;
- sbit D3=P1^0;
- sbit bg_1602=P2^6;
- sbit key=P3^3;
- sbit Beep=P3^4;
- uc code tab0[]=" 123456789#";
- uc code tab1[]="Calling!!!";
- uc code tab2[]="I Know!";
- uc code tab3[]="Happy Every Day!";
- uc num_D0=0,num_D1=0,num_D2=0,num_D3=0;
- bit bdata fu_D0=0;
- fu_D1=0,fu_D2=0,fu_D3=0,flag;
- void delay(ui x)
- {
- ui i,j;
- for(i=0;i<x;i++)
- for(j=0;j<121;j++);
- }
- void init()
- {
- bg_1602=0;
- TMOD=0x01;
- TH0=0xff;
- EA=1;
- ET0=1;
- TR0=1;
- D0=0;
- D1=0;
- D2=0;
- D3=0;
- }
- void com_1602(uc com)
- {
- RS=0;
- P0=com;
- delay(1);
- E=1;
- delay(1);
- E=0;
- RS=1;
- }
- void data_1602(uc date)
- {
- RS=1;
- P0=date;
- delay(1);
- E=1;
- delay(1);
- E=0;
- RS=0;
- }
- void dis_1602(uc word_num,uc hang,uc lie,uc tab_num,uc num)
- {
- uc n;
- for(n=0;n<word_num;n++)
- {
- com_1602(0x80+hang*0x40+lie);
- if(tab_num==0)
- data_1602(tab0[num+n]);
- else if(tab_num==1)
- data_1602(tab1[num+n]);
- else if(tab_num==2)
- data_1602(tab2[num+n]);
- else if(tab_num==3)
- data_1602(tab3[num+n]);
- delay(5);
- lie++;
- }
- }
- void init_1602()
- {
- RW=0;
- com_1602(0x38);
- com_1602(0x0c);
- com_1602(0x06);
- com_1602(0x01);
- }
- void know()
- {
- if(D0!=fu_D0)
- num_D0=1;
- if(D1!=fu_D1)
- num_D1=2;
- if(D2!=fu_D2)
- num_D2=3;
- if(D3!=fu_D3)
- num_D3=4;
- if(key==0)
- {
- delay(5);
- if(key==0)
- {
- if((num_D0!=0)||(num_D1!=0)||(num_D2!=0)||(num_D3!=0))
- {
- bg_1602=0;
- Beep=1;
- flag=0;
- num_D0=0;num_D1=0;num_D2=0;num_D3=0;
- fu_D0=D0;fu_D1=D1;fu_D2=D2;fu_D3=D3;
- com_1602(0x01);
- dis_1602(7,1,4,2,0);
- }
- else
- bg_1602=0;
- }
- while(!key);
- delay(2000);
- com_1602(0x01);
- }
- }
- void display()
- {
- if((num_D0==0)&&(num_D1==0)&&(num_D2=0)&&(num_D3==0))
- dis_1602(16,0,0,3,0);
- else
- {
- if(flag==0)
- {flag=1;
- com_1602(0x01);
- }
- if(num_D0==1)
- {
- dis_1602(1,0,2,0,num_D0);
- dis_1602(1,0,3,0,10);
- }
- if(num_D1==2);
- {
- dis_1602(1,0,5,0,num_D1);
- dis_1602(1,0,6,0,10);
- }
- if(num_D2==3);
- {
- dis_1602(1,0,8,0,num_D2);
- dis_1602(1,0,9,0,10);
- }
- if(num_D3==4);
- {
- dis_1602(1,0,11,0,num_D3);
- dis_1602(1,0,12,0,10);
- }
- dis_1602(10,1,3,1,0);
- }
- }
- void LED()
- {
- if((D0!=fu_D0)||(D1!=fu_D1)||(D2!=fu_D2)||(D3!=fu_D3))
- bg_1602=0;
- }
- void main()
- {
- init();
- init_1602();
- while(1)
- {
- display();
- know();
- LED();
- }
- }
- void T0_time() interrupt 1
- {
- ui m,n;
- TH0=0x4b;
- TL0=0xff;
- m++;
- if(m==10)
- {
- m=0;
-
- if((num_D0!=0)||(num_D1!=0)||(num_D2!=0)||(num_D3!=0))
- Beep=~Beep;
- }
- if((bg_1602==0)&&(D0==fu_D0)&&(D1==fu_D1)&&(D2==fu_D2)&&(D3==fu_D3))
- {
- n++;
- if(n==300)
- {
- n=0;
- bg_1602=1;
- }
- }
- }
復(fù)制代碼
0.png (48.22 KB, 下載次數(shù): 44)
下載附件
2018-6-1 04:36 上傳
所有資料51hei提供下載:
病床呼叫裝置.rar
(91.96 KB, 下載次數(shù): 75)
2018-5-31 13:50 上傳
點(diǎn)擊文件名下載附件
電路圖,PCB,代碼 下載積分: 黑幣 -5
|
|