抢答器
单片机源程序如下:
- #include<reg52.h>
- #include"key.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit k1=P3^1;
- sbit k2=P3^0;
- sbit k3=P3^2;
- sbit k4=P3^3;
- sbit beep=P1^5;
- uchar wei[8],flag=1,flag2,flag1;
- char ns=0,ms=0,s=10;
- uchar num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
- 0x07,0x7f,0x6f,0x40};
- void init()
- {
- TMOD=0x01; //定时器0,方式一
- TH0=(65536-400)/256; //赋初值
- TL0=(65536-400)%256;
- EA=1; //开总中断
- ET0=1; //开定时器1的中断
- TR0=0; //开定时
- }
- void feng()
- {
- uchar i;
- for(i=0;i<50;i++)
- {
- beep=0;
- delayns(200);
- beep=1;
- delayns(200);
- }
- }
- void zhuanhua()
- {
- wei[0]=num[ns%10];
- wei[1]=num[ns/10];
- wei[2]=num[10];
- wei[3]=num[ms%10];
- wei[4]=num[ms/10];
- wei[5]=num[10];
- wei[6]=num[s%10];
- wei[7]=num[s/10];
- }
- void xianshi()
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- switch(i)
- {
- case 0:
- LSA=0,LSB=0,LSC=0;break;
- case 1:
- LSA=1,LSB=0,LSC=0;break;
- case 2:
- LSA=0,LSB=1,LSC=0;break;
- case 3:
- LSA=1,LSB=1,LSC=0;break;
- case 4:
- LSA=0,LSB=0,LSC=1;break;
- case 5:
- LSA=1,LSB=0,LSC=1;break;
- case 6:
- LSA=0,LSB=1,LSC=1;break;
- case 7:
- LSA=1,LSB=1,LSC=1;break;
- }
- P0=wei[i];
- delayns(200);
- P0=0x00;
- }
- }
- void keyscan()
- {
- if(flag==1)
- {
- if(k1==0)
- {
- delayns(100);
- if(k1==0)
- {
- if(flag1==0)
- {
- TR0=1;
- flag=0;
- flag2=0;
- flag1=1;
- }
- }
- }
- }
- while(k1!=1);
- if(flag==0)
- {
- if(k2==0)
- {
- delayns(100);
- if(k2==0)
- {
- s=10;ms=0;ns=0;
- TR0=0;
- flag=1;
- flag1=0;
- flag2=0;
- }
- }
- }
- while(k2!=1);
- if(flag1==1)
- {
- key_num();
- if((keynum>=1)&&(keynum<=9))
- {
- TR0=0;
- LSA=0;LSB=0;LSC=0;
- P0=num[keynum];
- keynum=0;
- flag1=0;
- flag2=1;
- }
- }
- }
- void main()
- {
- init();
- while(1)
- {
- keyscan();
- if(flag2==0)
- {
- zhuanhua();
- xianshi();
- }
- }
- }
- void zd() interrupt 1
- {
- TH0=(65536-400)/256;//赋初值
- TL0=(65536-400)%256;
- ns--;
- if(ns==-1)
- {
- ns=49;
- ms--;
- if(ms==-1)
- {
- ms=49;
- s--;
- }
- }
- if((s==0)&&(ms==0)&&(ns==0))
- {
- s=0;ms=0;ns=0;
- TR0=0;
- feng(); //在嵌套一个中断,消除蜂鸣器占用问题
- }
- }
复制代码
所有资料51hei提供下载:
抢答器.zip
(37.91 KB, 下载次数: 7)
|