八路抢答器的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)
|