八路抢答器论文(6)

2019-05-17 18:27

void buzzer(unsigned char t) //蜂鸣器发声函数,改变传入参数t的值可以改变发出声音 {

unsigned char i; for(i = 0;i<100;i++) { beep = 1; //脉冲使蜂鸣器发声 delayus(t); //控制脉冲周期 可以改变发生频率,即声音 }

beep = 0; //发声完后,端口给低 }

void dis_1(unsigned char num1) //1个数码管的显示函数 显示的是哪一位选手按下了 {

seg_1 = OPEN; //开数码管的显示 seg_2 = OFF; seg_3 = OFF;

dat = seg_dat[num1]; //让数码管显示对应的数值 delayms(5); //短暂的延时可以增加亮度 dat = seg_dat[10]; //关闭显示,避免在动态显示时,这一次的值对下一次的值造成干扰。 }

void dis_2(unsigned char num2) //2个数码管的显示函数 显示的是倒计时时间 {

unsigned char shi,ge;

shi = num2/10; //提取出各个位的值 ge = num2; seg_1 = OFF; seg_2 = OPEN; //开数码管的显示 seg_3 = OFF;

dat = seg_dat[shi]; //让数码管显示十位的数值 delayms(5); //短暂的延时可以增加亮度

1

dat = seg_dat[10]; //关闭显示,避免在动态显示时,这一次的值对下一次的值造成干扰。

seg_1 = OFF; seg_2 = OFF; seg_3 = OPEN; //开数码管的显示

dat = seg_dat[ge]; //让数码管显示十位的数值 delayms(5); //短暂的延时可以增加亮度 dat = seg_dat[10]; //关闭显示,避免在动态显示时,这一次的值对下一次的值造成干扰。 }

void delayms(unsigned int i) //延时大约ims {

unsigned int x,y; for(x = 0;x

void delayus(unsigned int i) //延时大约ius {

unsigned int x; for(x = 0;x

//**************************************************** //主函数

//****************************************************

void main(void) {

unsigned char x=0; //用来储存键值

while(!flag1) //当主持人没有按下按键时,其他人按下按键,蜂鸣器响 {

1

x = key_scan(); while(flag2 == 1) //当主持人没有按下,而其他人按下时,选手数码管上显示犯规选手的序号,同时蜂鸣器发声报警 { buzzer(2); //蜂鸣器发声 dis_1(x); //显示犯规选手的序号 seg_1 = OFF; seg_2 = OPEN; //开数码管的显示 seg_3 = OFF; dat = 0x74; //让数码管显示十位的数值 delayms(5); //短暂的延时可以增加亮度 dat = seg_dat[10]; //关闭显示,避免在动态显示时,这一次的值对下一次的值造成干扰 seg_1 = OFF; seg_2 = OFF; //开数码管的显示 seg_3 = OPEN; dat = 0x74; //让数码管显示十位的数值 delayms(5); //短暂的延时可以增加亮度 dat = seg_dat[10]; //关闭显示,避免在动态显示时,这一次的值对下一次的值造成干扰 } while(flag1) //当主持人按下按键后 设置定时器,开始倒计时 { TMOD = 0x01; //定时器工作模式1 TH0 = (65536 - 50000)/256; //单次计时时间为50ms TL0 = (65536 - 50000)%6; TR0 = 1; //计数器开始计数 ET0 = 1; //开启计数器0中断 EA = 1; //开总中断 } dis_1(0); //初始时,选手的数码管显示0 dis_2(30); //初始时,倒计时的数码管显示30 }

1

flag2 = 0; //主持人标志位清零 x = 0; //键值储存清零 while(!flag2) //此时抢答环节开始,倒计时,并判断是否有选手抢答 { x = key_scan(); if(T0count >= 20 ) //当TOcount=20时,表示计时1s { T0count = 0; //清零 Time_Left --; } if (Time_Left == 0) //当倒计时为0时,蜂鸣器响, { buzzer(20); //蜂鸣器响 dis_2(0); //数码管显示0 dis_1(0); //数码管显示0 TR0 = 0; //关闭定时器 } dis_2(Time_Left); //倒计时显示 dis_1(x); }

TR0 = 0; //关闭定时器 while(1) //整个环节结束,显示倒计时时间和抢搭选手的序号 ,蜂鸣器响 {

dis_2(Time_Left); dis_1(x); buzzer(2); } }

//**************************************************** //T0中断函数

//**************************************************** void timer0(void) interrupt 1 //计数器0中断 {

1

}

TH0 = (65536 - 50000)/256; //重装初值 TL0 = (65536 - 50000)%6; T0count++;

1


八路抢答器论文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:水污染事件

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: