单片机四位抽奖机

上传人:ai****ue 文档编号:51672164 上传时间:2022-01-28 格式:DOCX 页数:31 大小:582.24KB
收藏 版权申诉 举报 下载
单片机四位抽奖机_第1页
第1页 / 共31页
单片机四位抽奖机_第2页
第2页 / 共31页
单片机四位抽奖机_第3页
第3页 / 共31页
资源描述:

《单片机四位抽奖机》由会员分享,可在线阅读,更多相关《单片机四位抽奖机(31页珍藏版)》请在装配图网上搜索。

1、电子时钟及抽奖机姓 名:学 号:系 别:物理与电子信息工程系专 业:电子科学与技术年 级:09级指导教师:白炳良2012年5月目录1摘要:32关键字:33设计任务33.1 两种抽奖方式33.2 扩展功能34设计方案34.1 设计思路34.2 方案比较与论证34.3 系统结构框图45各功能模块设计45.1 显示模块原理45.2 参数at算55.3 独立式按键模块55.4 总系统原理图66软件设计76.1 I/O 口分配 76.2 随机数算法86.3 秒产生算法86.4 按键扫描86.5 显示扫描87流程图888程序清单129调试要点279.1 硬件调试279.2 软件调试279.3 结果分析及设

2、计工作总结2710参考文献及附件2710.1 参考文献2810.2 元器件清单2811PC阪图28281摘要:本设计由单片机AT89S52芯片和LED共阳数码管为核心,辅以必要的电路,构成了一个由单片机控制的四位显示设计,设计制作同步和单步抽奖机,在模式键、启动键,停止键的控制下 实现设计集成了时钟、秒表、四位抽奖三种功能于一体。2关键字:AT89S52动态显示四位抽奖按键扫描随机数秒表3设计任务3.1 两种抽奖方式3.1.1 按抽奖启动键时,四位数码管以不同的随机数快速滚动显示,按抽奖停止键时,四位随机数停止滚动显示在数码管上。3.1.2 按抽奖启动键时,个位数码管以随机数快速滚动显示,按抽

3、奖停止键时,个位随机数停止滚动显示在数码管上;用同样的方法来确定十位、百位、千位的随机数。3.2 扩展功能电子时钟:电子钟以99时59分59秒为一个计数周期,在显示分秒, 时分模块化之间切换。4设计方案4.1 设计思路本设计需要实现两种方式的抽奖(即四位同时抽和逐位抽奖),因此重点在于由软件产生随机数;而硬件则需由数码管来显示中奖结果以及按键来控制抽奖模式和启动、停止抽奖。系统以AT89S52为核心,主要有显示模块、按键模块和单片机软件控制模块构成。4.2 方案比较与论证数码管显示模块:方案一:单片机输出数据经译码芯片CD4511进行译码后直接驱动数 码管,数码管公共端接9012三极管扩流,并

4、通过单片机I/O 口控制三极 管的选通,实现动态显示。方案二:有单片机的I/O 口直接驱动数码管的段码,数码管的公共端接9012三极管,通过灌电流的方式点亮数码管,也需通过单片机I/O 口控制三极管的选通,实现动态显示。由于所需I/O 口由AT98S52可直接提供,无须因为 I/O 口不够而用 CD4511来节省I/O 口,方案二又较方案一更容易实惠,所以,我选择方案二。4.3 系统结构框图AT89S52单片机在模式键、启动键和停止键的控制下,由 P1 口输出数据, 通过P2.0、P2.1、P2.2、P2.4进行选通,有数码管显示信息。系统框图:图2-3系统总框图5各功能模块设计5.1 显示模

5、块原理由单片机(AT89S52)的弓|脚P1 口输出中奖、时间等数据信息,通过片选信号 P2.0、P2.1、P2.2、P2.4就可在相应的数码管进行显示。当位选信号P2.0为低电平时,P1 口送出数据也为低电平就点亮数码管,电流灌进单片机。多位LED显示,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个 8位 I/O 口控制。而共阳极公共端分别接一个 9012,由相应的I/O 口线控制9012, 实现各位数码管的分时选通。段选码,位选码每送入一次后延时10MS因人的视觉暂留时间为0.1S (100MS,所以每位显示的时间不能超过 20MS并保持延 时一段时间,以造成视觉暂留效果,给人

6、看上去每个数码管总在亮。 这种方式称 为软件扫描方式。电路如(图3-1)所示。由于采用的是共阳极数码管,所以要让段码点亮需把 I/O 口置0,例如:段 码a到g对应的I/O 口是P1.0到P1.6,则要让数码管显示0到6对应的16进 值如图所示图3-1显示电路P1.6,一P1.5P1.4P1.3P1.2P1.1P1.016进制010000000C0H111110010F9H201001000A4H301100000B0H4001100199H5001001092H6000001082H图3-2码表R1RES2RES2R3P2.0R4RES2h14ES5.2 参数计算由于I/O 高电平约等于5V

7、,使用灌电流的方式驱动数码管,故选用 PNP型 三极管9012;数码管能正常工作的段电流为 3mA-10 mA,压降为1.7V,三极 管发射极和集电极的压降为0.3V ,因此限流电阻的压降为3.0V ,5VR -5 500所以选用限流电阻的阻值 R=470欧.10mA5.3 独立式按键模块独立式按键是直接用 I/O 口线构成的单个按键电路,其特点是每个按键单独占用一根I/O 线,每个按键的工作不会影响其它I/O 口线的状态。独立式按键的典型应用如 (图3-3)所示。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O 口线,因此,在按键较多时,I/O 口线浪费较大,但本设计只用到

8、三个按键,顾采用独立式按键电路。图3-3独立式按键电路5.4 总系统原理图单片机(AT89S52)9脚为复位输入端。上电复位,只要 RST引脚上有大于二 个机器周期以上的高电平,单片机(AT89C2051)即复位。按键从单片机(AT89S52)的P2.0、P2.1、P2.2、P2.4 口接入,当按键被按下时,相应的输入口就会输入低电平 00单片机(AT89S52)的XTAL1脚、XTAL2脚接一个由12M晶振和10pf组成的振 荡电路。为单片机提供相应的时序。arorb c d c fPg0P7&r Bar5ar4MP2QP2arOTN1 1TNI 7TP Ln-O- OL QxrU1 89s

9、52RSTNR&P DXTpy网日1T1XRWR4151 口-彳3216软件设计主程序主要起到一个导向和决策功能,控制程序的走向。本系统在主程序 中运用模块化结构,所有控制量集中处理,提高了处理效率,并在RAMS立各控 制量的映射,方便各功能模块的编程及修改。运用散转结构,可实现无扰动重入。 本设计主要有以下几个模块:时钟模块、四位抽奖模块、逐位抽奖模块。操作说明:上电复位后进入数码初显示模块;按 SW0启动,四位数码管产生四 位随机数,按SW0四位随机数停止(操作可重复);按SW1 一次进入抽奖2模 块;按SW0启动,四位数码管最低位产生随机数,按SW1最低位停止高位启动 按4次SW1后四位

10、数码管均产生随机数,按 SW0键停止抽奖(操作可重复); 按SW1 一次进入时间模块(可循环)。按RET键单片机复位。6.1 i/o 口分配1、P2.0、P2.1、P2.2、P2.4作为个位、十位、百位、千位数码管片选。2、P3.0、P3.4、P3.7 作为按键接口。3、P1.0到P1.6作为段码aUg的输出口6.2 随机数算法在随机数模式下,调用库函数 stdlib . h ,用 dis_bufi =dis_dmrand() %0返回随机数值6.3 秒产生算法将定时器0定时5mS每计数200次为1S。6.4 按键扫描直接判断按键的按下与放开,不采用标志位判断。6.5 显示扫描显示扫描采用高、

11、低两位分开显示;这样,在进行时钟显示及秒表显示时易于处7流程图Msta=1 :四位同时抽奖NN程序清单/*名称:四位抽奖机编写:小叶日期:2012.5.4平台:AT89S52*/ #include#include#include#define uint unsigned int/ 宏定义#define uchar unsigned char/宏定义#define nop _nop_()/*端口定义*/#define disport P0/数据端口sbit cs0=P2八0;sbit cs1=P2A1;sbit cs2=P2A4;sbit sw0=P3A0;sbit cs3=P2A2;/独立按键

12、端口sbit sw1=P3八4;sbit sw2=P3A7;/*定义变量*/uchar data key;/定义键值寄存器uchar bdata ekey; /定义键沿寄存器uchar bdata lastkey;sbit esw0=ekeyA0;sbit esw1=ekeyA4;sbit esw2=ekeyA7;bit flaflag;/定义闪烁标志bit f300flag;bit cj=1;uchar f300t, f200t=200,f100t;/ 闪烁标志uchar msta,ck=0;uchar flasta=5;uchar a,b,c,d,e,g,h;ucharcodedis_dm

13、=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xfc,0x00,0xf0,0x0f;/显示段码值uchar dis_buf=0xC0,0xC0,0xC0,0xC0,0xff;/显示缓冲uchar dis_pointer,pointer;/*函数声明void Disply();void Flaply();void KeyScan();void Init_timer0();void choujiang_2();void dianzishizhong();void dianzishizhongxiaoshi();/*主函数定义显示指

14、针*/ 显示函数/闪烁函数/读键函数/定时器初始化/抽奖方式2/电子时钟*/ void main() uint i;TMOD=0x11; /定时器0工作方式1SCON=0x00;TH0=0xec;TL0=0x78;TR0=1;while(1)while(!TF0); /5ms?TF0=0;TH0=0xec; / 定时器初值重设TL0=0x78;KeyScan(); /调用键扫描函数,显示函数Disply();Flaply();if(f300t+=100)/f300t=0;/ f300flag=!f300flag;if(f100t+=600)f100t=0;ck=1;switch(msta)ca

15、se 0:dis_buf0=0x90;/数码显示初值dis_buf1=0xC0;dis_buf2=0xA4;dis_buf3=0xA4;if(esw0) msta=1;if(esw1) msta=2;if(esw2) msta=3;break;case 1:if(esw0)cj=!cj;if(cj)for(i=0;i9)a=0;+b;if(b5)b=0;+c;if(c9)c=0;+d; if(d5)d=0;+e;if(e9)e=0;+g;if(g9)g=0;dis_buf0=dis_dmc;dis_buf1=dis_dmd;dis_buf2=dis_dme;dis_buf3=dis_dmg;f

16、200t=200;break;default:msta=0;/*抽奖方式2逐位抽奖*/void choujiang_2()(switch(pointer) case 0:if(esw0)cj=!cj;if(cj)dis_buf0=dis_dmrand()%10;if(esw1)pointer=1;break;case 1:if(esw0)cj=!cj;if(cj)dis_buf1=dis_dmrand()%10;if(esw1)pointer=2;break;case 2:if(esw0)cj=!cj;if(cj)dis_buf2=dis_dmrand()%10;if(esw1)pointer

17、=3;break;case 3:if(esw0)cj=!cj;if(cj)dis_buf3=dis_dmrand()%10;if(esw1)pointer=0;break;default:break;/*电子时钟分秒*/void dianzishizhong()(+a;if(a9)a=0;+b;if(b5)b=0;+c;if(c9)c=0;+d;if(d5)d=0;+e;dis_buf0=dis_dma;dis_buf1=dis_dmb;dis_buf2=dis_dmc;dis_buf3=dis_dmd;/*定时器0初始化函数*/void Init_Timer0(void)TMOD = 0x1

18、1;/TH0=0xec;TL0=0x78;/TR0= 1;/)定时器0工作在方式1定时器5ms初值开定时器0/*键扫描函数*/ void KeyScan()uchar kbuf,keyt;P2=0XFF;P3=P3|0X91;kbuf=P3;kbuf=(kbuf&0X91)八0X91;lastkey=kbuf;if(lastkey!=key)/lastkey 为前沿if(keyt-!=0)/lastkey=key;/读独立按建键有变化? key为电平,键有变,计数到?/放弃不稳定的键)elsekeyt=0X05;/重赋去抖值ekey=(keyAlastkey)&lastkey; /键前沿提取k

19、ey=lastkey;)/*显示函数*/void Disply() disport=0xff;P2=0xff;switch(dis_pointer)应显示位case 0: cs0=0;disport=dis_buf0;dis_pointer=1;if(flaflag)Flaply();break;/根据显示指针,转相/ 点亮第零位数码管/ 点亮第一位数码管case 1: cs1=0;点亮第二位数码管点亮第三位数码disport=dis_buf1;dis_pointer=2;if(flaflag)Flaply();break;/case 2: cs2=0;disport=dis_buf2;dis

20、_pointer=3;if(flaflag)Flaply();break;case 3: cs3=0;/fdisport=dis_buf3;dis_pointer=0;if(flaflag)Flaply();break;default:break;/*闪烁函数*/void Flaply()(switch(flasta)(case 0: if(f300flag)cs0=1;break;case 1: if(f300flag)cs1=1;break;case 2: if(f300flag)cs2=1;break;case 3: if(f300flag)cs3=1;break;case 4: if(

21、f300flag)cs0=1;/据闪烁状态转相应位/ 300ms 至U,关显示/ 300ms 至U,关显示if(f300flag)cs1=1;if(f300flag)cs2=1;if(f300flag)cs3=1;break;default:break;9调试要点9.1硬件调试1、硬件完成后,检查电路有无短路、断路或虚焊;2、电路板检查正常后,编一段简单的显示程序,检验显示电路是否正常;3、若显示电路正常后,则可开始进行程序调试;4、动态显示时要注意任一时刻只能一个数码管工作;5、按键又应的I/O 口要置为1。9.2 软件调试1、软件平台采用 WAVE60002、参考的子程序均用 WAVE60

22、0城行调试,确保结果正确;(参考的子程序有:二翻十 进制转换、拆字)3、本设计要实现 3种功能:时钟、秒表及四位抽奖机;调试时哪个功能不正常,则直 接找相应的模块进行调试。9.3 结果分析及设计工作总结1、实现功能:正常走时秒表及四位抽奖机。2、经验:通过本电路的设计使我更进一步了解了单片机89S52系列芯片的强大的功能,进一步熟悉89S52系列单片机的编程指令集的实际应用,再次增强了自己的动手、思考能力,同时也体现了实践和理论相结合的要求。为将来步 入社会奠定了基础。10参考文献及附件10.1 参考文献10.1.1 倪云峰.单片机原理与应用.电子科技大学出版.200910.1.2 华林,周小方编著.电子设计竞赛实训教程M.:航空航大大学,2007, 710.2 元器件清单器件名称器件型号数量器件名称器件型号数量数码管共阳4单片机AT89S521电解电容10pF2三极管90124晶振12MHZ1电阻470欧9按键按键4电阻4 K75电解电容220uf1电解电容220uf17805110脚1-XTAL1 (反相器输入端):反相振荡器的放大器输入端和部时钟工作电路的输入端。多与XTAL2引脚一起连接晶体震荡器使用。若采用外部时钟源驱动器件,XTAL2应不接。-XTAL2 (反相器输出端):反相振荡器的放大器输出端。11PCBK图w-OZ?*-nFF4*-071-*-OZF*

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!