八路搶答器的proteus仿真原理圖:
單片機源程序:
- #include <reg51.h>
- #define uint unsigned int //宏定義
- #define uchar unsigned char
- sbit P3_3=P3^3;
- sbit P3_4=P3^4;
- void delayms(uint xms);
- uchar code tab[8]={0xf9,0xa4,0xb0,0x99,0x82,0xf8,0x80,0x90};
-
- /*-------------------------------
- TNTO 中斷函數
- ---------------------------------*/
- void int_0() interrupt 0
- {
- uchar button;
- P0=0xff;
- button=P0;
- button&=0xff;
- switch (button)
- {
- case 0xfe:P2=tab[0];P3_4=~P3_4;delayms(1);break;
- case 0xfd:P2=tab[1];P3_4=~P3_4;delayms(1);break;
- case 0xfb:P2=tab[2];P3_4=~P3_4;delayms(1);break;
- case 0xf7:P2=tab[3];P3_4=~P3_4;delayms(1);break;
- case 0xef:P2=tab[4];P3_4=~P3_4;delayms(1);break;
- case 0xdf:P2=tab[5];P3_4=~P3_4;delayms(1);break;
- case 0xbf:P2=tab[6];P3_4=~P3_4;delayms(1);break;
- case 0x7f:P2=tab[7];P3_4=~P3_4;delayms(1);break;
- }
- delayms(3000);
- P2=0xff;
- }
- /*--------------------------------------
- TNT1 中斷函數---增加案件的識別
- -------------------------------------------*/
- void int_1() interrupt 2
- {
- P3=0x0f;
- if(P3_3==0)
- delayms(10);
- if(P3_3==0)
- {P2=0xbf;
- while(P3_3==0);
- do
- { delayms(10); }
- while(P3_3==0);
- }
- delayms(3000);
- P2=0xff;
- }
- /*--------------------------------------
- 主函數
- -------------------------------------------*/
- void main()
- {
- uchar k,w;;
- EA=1;
- EX0=1;
- IT0=1;
- IT1=1;
- EX1=1;
- PX1=1;
- while(1)
- { w=0x01;
- for(k=0;k<8;k++)
- {
- P1=~w;
- delayms(500);
- w<<=1;
- }
- }
- }
- /*--------------------------------------*/
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
復制代碼
所有資料打包下載:
八路搶答器.rar
(40 KB, 下載次數: 30)
2016-10-20 08:25 上傳
點擊文件名下載附件
八路搶答器
|