单片机原理 课程结业报告.docVIP

  • 3
  • 0
  • 约4.4千字
  • 约 10页
  • 2019-11-28 发布于湖南
  • 举报
单片机原理 课程结业报告 题目(12) 8位竞赛抢答器的设计 学号 姓名 1 设计要求 1、以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。 2、设置一个系统清除和抢答控制开关S,开关由主持人控制。 抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号,并把优先抢答选手的编号一直保持到主持人将系统清除为止。 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。 3、当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。 提示:参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00 2 设计原理 通过键盘改变抢答的时间,原理与闹钟时间的设定相同,将定时时间的变量置为全局变量后,通过键盘扫描程序使每按下一次按键,时间加1(超过30时置0)。同时单片机不断进行按键扫描,当参赛选手的按键按下时,用于产生时钟信号的定时计数器停止计数,同时将选手编号(按键号)和抢答时间分别显示在LED上。 3 设计电路图 4 核心代码设计思路及程序流程图 按键发声 按键发声 显示抢答号,剩余时间 停止键按下? 抢答键按下? 停止键按下? 开始键按下? 程序初始化 倒计时显示 倒计时开始 按键发声 准备状态,显示FFF 倒计时大于5s? 显示法规号码 按键发声 非法抢答? 停止键按下? 提醒发声 倒计时结束? Y N N Y N N N N N Y Y Y Y Y 流程图 5 Proteus仿真图 6 Keil核心源代码 #includereg51.h #define uchar unsigned char #define uint unsigned int uint x,y,m,n,shi,ge,host,haoma,f1,f3,ready; //共阴数码管0-9编码 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; sbit key5=P1^4; sbit key6=P1^5; sbit key7=P1^6; sbit key8=P1^7;*/ sbit keyzhu=P3^0; sbit clean=P3^1; sbit keyf=P3^7; //蜂鸣器 sbit wei1=P2^0; //位选端口 sbit wei3=P2^2; sbit wei4=P2^3; //延时函数 void delay(uint xms) { uint i,j; for(i=xms;i0;i--) { for(j=120;j0;j--) { } } } //初始化函数 void init() { TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; //开中断 ET0=1; //定时/计数器T0中断允许 TR0=0; //T0不工作 ET1=1; //定时/计数器T1中断允许 TR1=0; //T1不工作 x=15; y=0; m=30; n=0; shi=0; ge=0; haoma=0; host=0; f1=0; f3=0; keyf=1; } //显示函数 void display(uint shi,uint ge,uint haoma) { wei3=0; P0=table[shi]; delay(5); wei3=1; wei4=0; P0=table[ge]; delay(5); wei4=1; wei1=0; P0=table[haoma]; delay(5); wei1=1; } //扫描键盘 void keyscan() { if(ready==1) { if(host==0) { switch(P1) { case 0xfe: delay(10); if(P1==0xfe) { TR0=0; host=1; haoma=1; TR1=1; keyf=0;

文档评论(0)

1亿VIP精品文档

相关文档