这本书上应该有《单片机C语言程序设计实训100例——基于PIC+Proteus仿真》
你好,我有个问题想请教下你
#include
unsigned char LED1=0;
unsigned char LED2=0;
unsigned char LED3=0;
unsigned char LED4=0;
unsigned char LED_L=0;
unsigned int time=0;
const unsigned char table[18]=
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x25,0x3c,0x23,0x34,0x74,0xF7,0xFF};
void timer1init(void)//初始化
{
T1CON=0X01; //打开定时器1
TMR1IF=0; //清除TMR1 中断标志
TMR1IE=1; //TMR1 中断允许
TMR1H=0xF6; //赋初值,以便TMR1 每2MS 左右中断一次
TMR1L=0x3D;
PIR1=0; //清除所有中断标志
PEIE=1; //允许外围总中断
GIE=1; //总中断开关打开
}
void interrupt T1(void)// 中断处理
{
if(TMR1IF==1)//如果是定时器1 中断
{ time++;//利用time的值来判断时间
TMR1IF=0;//清除定时器1 中断标志
TMR1H=0XF6;//重新复初值 2.5ms左右
TMR1L=0x3D;
switch(LED_L)
{
case 0://点亮第一个数码管
RE2=1;
RE1=0;
RE0=0;
RA5=table[LED1];
PORTB = table[LED1];
LED_L = 1;
break;
case 1://点亮第二个数码管
RE2=0;
RE1=1;
RE0=0;
RA5=table[LED2];
PORTB = table[LED2];
LED_L = 2;
break;
case 2:
RE2=1;
RE1=1;
RE0=0;
RA5=table[LED3];
PORTB = table[LED3];
LED_L = 3;
break;
case 3:
RE2=0;
RE1=0;
RE0=1;
RA5=table[LED4];
PORTB = table[LED4];
LED_L = 0;
break;
default://语句d
LED_L = 0;
break;
}
}
}
delay(unsigned int n)//延时m 毫秒
{
int j,k;
for(j=0;j
}
main()//主函数
{
int a=1,b,buzzer=0,f;//定义一个标志位a,b
ADCON1=0X06;//初始化
TRISA=0X00;
TRISB=0X00;
PORTB=0X00;
TRISD=0X01;//设置RD0 输入
PORTD=0X01;//设置RD0 输入
TRISE=0X00;
timer1init();//定时器1 初始化
RA1=1;//使能138 译码器
LED1=10;LED2=10;LED3=10;LED4=10;//数码管都关
while(1)
{
while(1)//主持人按键按下之前不能抢答
{
RD7=1;//按键A 一端高电平
if(RD0==1)//按键按下?
{
delay(10);//延时10 毫秒去键抖
if(RD0==1)//再次确认
{ LED1=0;LED2=0;LED3=0;LED4=0;//数码管显示0000
RD7=0;break;//如果主持人按键了,才进入下面的程序,可以抢答
}//数码管显示1
while(RD0==1);//等待放手
}
RD7=0;
}
while(1)
{
RD4=1;//按键1 一端高电平
if(RD0==1)//按键按下?
{
delay(10);//延时10 毫秒去键抖
if(RD0==1)//再次确认
{RD2=1;delay(30);RD2=0;
LED1=1;// 如果1号选手抢答,显示1
RD4=0;break;
}//数码管显示1
while(RD0==1);//等待放手
}
RD4=0;
RD5=1;//按键2 一端高电平
if(RD0==1)//按键按下?
{
delay(10);//延时10 毫秒去键抖
if(RD0==1)//再次确认
{
RD2=1;delay(30);RD2=0;
LED1=2;// 如果2号选手抢答,显示2
RD5=0;break;
}
while(RD0==1);//等待放手
}
RD5=0;
RD6=1;//按键3 一端高电平
if(RD0==1)//按键按下?
{
delay(10);//延时10 毫秒去键抖
if(RD0==1)//再次确认
{
RD2=1;delay(30);RD2=0;
LED1=3;// 如果3号选手抢答,显示3
RD6=0;break;
}//数码管显示1
while(RD0==1);//等待放手
}
RD6=0;
}
}
}
上面的是我写的一个抢答器的程序!我想加一些功能 ,可是不知道怎样下手了!主要加的功能 是就是如果主持人没有按下键有人抢答的话,会有蜂鸣器响警告并且显示出4或5或6(第1个人是4,第2个人是5,第3个人是6),如果是有人抢答了,接下来有人抢答也不会出现反应。等主持人按下按键后才重新开始抢答。就是有人抢答的话,是第1名选手就是显示4,第二个是5,第三个是6.而且有人抢答都会有蜂鸣器响警告,但是最好是每人的响的频率不一样!
不会
想要达到什么样的效果?