|
這個(gè)基于C51單片機(jī)的雙路壓力監(jiān)測(cè)報(bào)警系統(tǒng)是本人所做課程設(shè)計(jì),已通過(guò)驗(yàn)收,沒(méi)有bug,功能更完善,所附包含proteus仿真文件,源代碼,使用說(shuō)明,可以做一個(gè)不錯(cuò)的參考。
所完成功能為模擬電路輸入測(cè)量?jī)陕穳毫χ,量程范?~100MPa,帶有LED報(bào)警功能,可以自行設(shè)置上限,壓力測(cè)量值分時(shí)顯示。
0.png (30.71 KB, 下載次數(shù): 57)
下載附件
2018-1-17 02:16 上傳
使用說(shuō)明:
1.開(kāi)始仿真,壓力上限初始值為99MPa;
2.點(diǎn)擊按鈕button(要使數(shù)碼管全部清零),在鍵盤處輸入上限值;
3.上限值修改成功,重新開(kāi)始顯示,顯示第一路時(shí)左側(cè)帶有上限值標(biāo)識(shí),顯示第二路時(shí)左側(cè)沒(méi)有標(biāo)識(shí);
4.當(dāng)測(cè)量數(shù)值超過(guò)了所設(shè)定上限,二極管閃爍報(bào)警;
5.結(jié)束仿真。
0.png (30.7 KB, 下載次數(shù): 53)
下載附件
2018-1-17 02:16 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #include<absacc.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define a DWORD [0x40]
- #define b DWORD [0x50]
-
- /**************函數(shù)聲明部分*************/
- void jianpan1(void);
- void jianpan2(void);
- void DelayMS(uint x);
- void int_CHANGE(uint y);
- void Display1(void);
- void Display2(void);
- void beep(void);
- uchar code ledtab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0~9共陰字型碼
- uchar data ledbuf[8]={0x6f,0x6f,0x73,0x48,0x00,0x00,0x00,0x00}; //初始顯示P=(數(shù)據(jù)緩沖區(qū))
- sbit OE=P2^0;
- sbit EOC=P2^1;
- sbit ST=P2^2;
- sbit CLK=P2^3;
- sbit LE1=P2^4;
- sbit LE2=P2^5;
- sbit BUTTON=P2^6;
- sbit BEEP=P2^7;
- sbit r4=P1^7;
- uchar Pre_KeyNo,KeyNo; //存儲(chǔ)鍵值
- uchar num1,num2,num; //存儲(chǔ)報(bào)警上限值
- void main() //主函數(shù)
- {
- uint i;
- TMOD=0x02; //方式2,8位自動(dòng)重裝初值定時(shí)方式
- TH0=0x14; //計(jì)數(shù)初值寄存器
- TL0=0x00; //8位計(jì)數(shù)器
- IE=0x82; //開(kāi)總中斷,并允許T0中斷
- TR0=1; //啟動(dòng)計(jì)數(shù)
- P2=0x4f; //端口初始化
- num1=9; //報(bào)警上限值初始化
- num2=9;
- num=100;
- r4=0;
- while(1)
- {
- if(BUTTON==0) //按鍵按下則進(jìn)行鍵掃
- jianpan1();
- r4=0;
- i=0;
- ST=0;ST=1;ST=0; //啟動(dòng)A/D
- while(EOC==0);
- OE=1;
- a=P3*100/255; //電壓的實(shí)際值
- a=a*10;
- int_CHANGE(a);
- Display1();
- Display2();
- OE=0;
- if(a>=(num*10))
- beep();
- while(i<100)
- {
- Display1();
- Display2();
- i++;
- }
- DelayMS(20);
- r4=1;
- i=0;
- ST=0;ST=1;ST=0; //啟動(dòng)A/D
- while(EOC==0);
- OE=1;
- b=P3*100/255; //電壓的實(shí)際值
- b=b*10;
- int_CHANGE(b);
- Display1();
- Display2();
- OE=0;
- if(b>=(num*10))
- beep();
- while(i<100)
- {
- Display1();
- Display2();
- i++;
- }
-
- DelayMS(20);
- }
-
- }
- void jianpan1() //鍵盤輸入存儲(chǔ)函數(shù)
- {
- uchar i=2,j=0;
- P0=0x00;
- while(i)
- {
- P1=0xf0; //準(zhǔn)備鍵掃
- Pre_KeyNo=16,KeyNo=16;
- if(P1!=0xf0)
- jianpan2(); //鍵盤掃描
- if(Pre_KeyNo!=KeyNo)
- { if(j==1)
- num2=KeyNo;
- if(j==0)
- { num1=KeyNo;
- j=1;
- }
- while(P1!=0xf0)
- P1=0xf0;
- i--;
- }
- DelayMS(100);
- }
- num=10*num1+num2;
- }
- void jianpan2() //鍵盤掃描函數(shù)
- {
- uchar Tmp;
- P1=0x0f;
- DelayMS(1);
- Tmp=P1^0x0f;
- switch(Tmp)
- {
- case 1: KeyNo=0;break; //第一列按下
- case 2: KeyNo=1;break; //第二列按下
- case 4: KeyNo=2;break; //第三列按下
- case 8: KeyNo=3;break; //第四列按下
- default:KeyNo=16;
- }
- P1=0xf0;
- DelayMS(1);
- Tmp=P1>>4^0x0f;
- switch(Tmp)
- {
- case 1: KeyNo+=0;break;
- case 2: KeyNo+=4;break;
- case 4: KeyNo+=8;break;
- case 8: KeyNo+=12;
- }
- }
- void int_CHANGE(uint y)
- {
- if(y==1000) //滿量程輸入時(shí)顯示100MPa
- {
- ledbuf[4]=0x06;
- ledbuf[5]=0x3f;
- ledbuf[6]=0xbf;
- ledbuf[7]=0x3f;
- }
- else {
- ledbuf[4]=0x00;
- ledbuf[5]=y/100; //得到十位
- ledbuf[5]=ledtab[ledbuf[5]]; //十位轉(zhuǎn)換為字型碼
- ledbuf[7]=y%100;
- ledbuf[6]=ledbuf[7]/10; //得到個(gè)位
- ledbuf[6]=ledtab[ledbuf[6]]; //得到十分位字型碼
- ledbuf[7]=ledbuf[7]%10; //得到十分位
- ledbuf[7]=ledtab[ledbuf[7]]; //得到個(gè)位字型碼
- ledbuf[6]=ledbuf[6]|0x80; //個(gè)位加固定小數(shù)點(diǎn)
-
- /*前導(dǎo)0的不顯示處理*/
- if(ledbuf[5]==0x3f) //如果十位為0,則十位的0不顯示,顯示格式為x.x
- ledbuf[5]=0x00;
- }
- }
- void Display1() //顯示函數(shù)
- {
- P0=~0x80;
- LE2=1;
- LE2=0;
- P0=ledbuf[7];
- LE1=1;
- LE1=0;
- DelayMS(2);
- P0=0x00;
- LE1=1;
- LE1=0;
- P0=~0x40;
- LE2=1;
- LE2=0;
- P0=ledbuf[6];
- LE1=1;
- LE1=0;
- DelayMS(2);
- P0=0x00;
- LE1=1;
- LE1=0;
- P0=~0x20;
- LE2=1;
- LE2=0;
- P0=ledbuf[5];
- LE1=1;
- LE1=0;
- DelayMS(2);
- P0=0x00;
- LE1=1;
- LE1=0;
- P0=~0x10;
- LE2=1;
- LE2=0;
- P0=ledbuf[4];
- LE1=1;
- LE1=0;
- DelayMS(2);
- P0=0x00;
- LE1=1;
- LE1=0;
- P0=~0x08;
- LE2=1;
- LE2=0;
- P0=ledbuf[3];
- LE1=1;
- LE1=0;
- DelayMS(2);
- P0=0x00;
- LE1=1;
- LE1=0;
- P0=~0x04;
- LE2=1;
- LE2=0;
- P0=ledbuf[2];
- LE1=1;
- LE1=0;
- DelayMS(2);
- P0=0x00;
- LE1=1;
- LE1=0;
- }
- void Display2() //顯示上限值
- {
- P0=~0x02;
- LE2=1;
- LE2=0;
- P0=ledtab[num2];
- LE1=1;
- LE1=0;
- DelayMS(5);
- P0=0x00;
- LE1=1;
- LE1=0;
- P0=~0x01;
- LE2=1;
- LE2=0;
- P0=ledtab[num1];
- LE1=1;
- LE1=0;
- DelayMS(5);
- P0=0x00;
- LE1=1;
- LE1=0;
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (45.38 KB, 下載次數(shù): 55)
下載附件
2018-1-17 02:17 上傳
所有資料51hei提供下載:
雙路壓力監(jiān)測(cè)報(bào)警系統(tǒng).zip
(35.88 KB, 下載次數(shù): 83)
2018-1-17 00:54 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|