ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:157.10KB ,
资源ID:10199674      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10199674.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机四位抽奖机设计方案.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机四位抽奖机设计方案.docx

1、单片机四位抽奖机设计方案单片机四位抽奖机设计方案1摘要:本设计由单片机AT89S52芯片和LED共阳数码管为核心,辅以必要的电路,构成了一个由单片机控制的四位显示设计,设计制作同步和单步抽奖机,在模式键、启动键,停止键的控制下实现设计集成了时钟、秒表、四位抽奖三种功能于一体。2关键字:AT89S52动态显示 四位抽奖 按键扫描 随机数 秒表 3设计任务3.1两种抽奖方式3.1.1按抽奖启动键时,四位数码管以不同的随机数快速滚动显示,按抽奖停止键时,四位随机数停止滚动显示在数码管上。3.1.2按抽奖启动键时,个位数码管以随机数快速滚动显示,按抽奖停止键时,个位随机数停止滚动显示在数码管上;用同样

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

3、机的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显示模块原理由单片机的引脚P1口输出中奖、时间等数据信息,通过片选信号P2.0 、P2.1、P2

4、.2、P2.4就可在相应的数码管进行显示。当位选信号P2.0为低电平时,P1口送出数据也为低电平就点亮数码管,电流灌进单片机。多位LED显示,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制。而共阳极公共端分别接一个9012,由相应的I/O口线控制9012,实现各位数码管的分时选通。段选码,位选码每送入一次后延时10MS,因人的视觉暂留时间为0.1S100MS,所以每位显示的时间不能超过20MS,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。这种方式称为软件扫描方式。电路如图3-1所示。由于采用的是共阳极数码管,所以要让段码点亮需把I/O口置0,

5、例如:段码a到g对应的I/O口是P1.0到P1.6,则要让数码管显示0到6对应的16进值如图所示图3-1显示电路P1.6P1.5P1.4P1.3P1.2P1.1P1.016进制010000000C0H111110010F9H201001000A4H301100000B0H4001100199H5001001092H6000001082H图3-2码表5.2参数计算由于I/O口高电平约等于5V,使用灌电流的方式驱动数码管,故选用PNP型三极管9012;数码管能正常工作的段电流为3mA-10 mA,压降为1.7V,三极管发射极和集电极的压降为0.3V,因此限流电阻的压降为3.0V,所以选用限流电阻的

6、阻值R=470欧.5.3独立式按键模块独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图3-3所示。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,但本设计只用到三个按键,顾采用独立式按键电路。图3-3独立式按键电路5.4总系统原理图单片机9脚为复位输入端。上电复位,只要RST引脚上有大于二个机器周期以上的高电平,单片机即复位。 按键从单片机的P2.0、P2.1、P2.2、P2.4口接入,当按键被按下时,相应的输入口就会输入低

7、电平0。 单片机的XTAL1脚、XTAL2脚接一个由12M晶振和10pf组成的振荡电路。为单片机提供相应的时序。6软件设计主程序主要起到一个导向和决策功能,控制程序的走向。本系统在主程序中运用模块化结构,所有控制量集中处理,提高了处理效率,并在RAM建立各控制量的映射,方便各功能模块的编程及修改。运用散转结构,可实现无扰动重入。本设计主要有以下几个模块:时钟模块、四位抽奖模块、逐位抽奖模块。操作说明:上电复位后进入数码初显示模块;按SW0启动,四位数码管产生四位随机数,按SW0四位随机数停止操作可重复;按SW1一次进入抽奖2模块;按SW0启动,四位数码管最低位产生随机数,按SW1最低位停止高位

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

9、示;这样,在进行时钟显示及秒表显示时易于处7流程图NMsta=0:8程序清单/*- 名称:四位抽奖机 编写:小叶 平台:AT89S52-*/#include#include#include#define uint unsigned int /宏定义#define uchar unsigned char /宏定义#define nop _nop_ /*- 端口定义-*/#define disport P0 / 数据端口sbit cs0=P20;sbit cs1=P21;sbit cs2=P24;sbit cs3=P22;sbit sw0=P30; /独立按键端口sbit sw1=P34;sbit

10、 sw2=P37;/*- 定义变量-*/uchar data key; / 定义键值寄存器uchar bdata ekey; / 定义键沿寄存器uchar bdata lastkey; sbit esw0=ekey0;sbit esw1=ekey4; sbit esw2=ekey7;bit flaflag; / 定义闪烁标志bit f300flag;bit cj=1;uchar f300cnt, f200cnt=200,f100cnt; / 闪烁标志uchar msta,ck=0; uchar flasta=5;uchar a,b,c,d,e,g,h;uchar code dis_dm=0xC

11、0,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; /抽奖方式2void dianzishizhong; /电子时钟vo

12、id dianzishizhongxiaoshi;/*- 主函数-*/void main uint i; TMOD=0x11; /定时器0工作方式1 SCON=0x00; TH0=0xec; TL0=0x78; TR0=1; while while; /5ms? TF0=0; TH0=0xec; /定时器初值重设 TL0=0x78; KeyScan; /调用键扫描函数,显示函数 Disply; Flaply;/if=100/f300cnt=0;/ f300flag=!f300flag; if=600 f100cnt=0; ck=1; switch case 0: dis_buf0=0x90;

13、/数码显示初值 dis_buf1=0xC0; dis_buf2=0xA4; dis_buf3=0xA4; if msta=1; if msta=2; if msta=3; break; case 1: if cj=!cj; if fori=0;i /四位数同时抽奖 dis_bufi=dis_dmrand%10; f300cnt=100; f300cnt-; if if flasta=4; / if / if /flasta=4; if msta=2; break; case 2: choujiang_2; if msta=3; break; case 3: / flasta=5; f200cn

14、t-; if dianzishizhong; f200cnt=200; if msta=0; if msta=4; break; case 4: if msta=3 ; if msta=0; / f200cnt=200; f200cnt-; if +a; if9 a=0;+b; if5 b=0;+c; if9 c=0;+d; if5 d=0;+e; if9 e=0;+g; if9 g=0; dis_buf0=dis_dmc; dis_buf1=dis_dmd; dis_buf2=dis_dme; dis_buf3=dis_dmg; f200cnt=200; break; default:mst

15、a=0; /*- 抽奖方式2 逐位抽奖-*/ void choujiang_2 switch case 0: if cj=!cj; if dis_buf0=dis_dmrand%10; if pointer=1; break; case 1: if cj=!cj; if dis_buf1=dis_dmrand%10; if pointer=2; break; case 2: if cj=!cj; if dis_buf2=dis_dmrand%10; if pointer=3; break; case 3: if cj=!cj; if dis_buf3=dis_dmrand%10; if poi

16、nter=0; break; default:break; /*- 电子时钟 分秒-*/ void dianzishizhong +a; if9 a=0;+b; if5 b=0;+c; if9 c=0;+d; if5 d=0;+e; dis_buf0=dis_dma; dis_buf1=dis_dmb; dis_buf2=dis_dmc; dis_buf3=dis_dmd; /*- 定时器0初始化函数-*/ void Init_Timer0 TMOD = 0x11; /定时器0工作在方式1TH0=0xec; TL0=0x78; /定时器5ms初值 TR0= 1; /开定时器0 /*- 键扫描函

17、数-*/void KeyScan uchar kbuf,keycnt; P2=0XFF; P3=P3|0X91; / 读独立按建 kbuf=P3; kbuf=0X91; lastkey=kbuf; if / 键有变化?key为电平,lastkey为前沿 if /键有变,计数到? lastkey=key; /放弃不稳定的键 else keycnt=0X05; / 重赋去抖值 ekey=&lastkey; /键前沿提取 key=lastkey; /*- 显示函数-*/void Disply disport=0xff; P2=0xff; switch / 根据显示指针,转相应显示位 case 0:

18、cs0=0; / 点亮第零位数码管 disport=dis_buf0; dis_pointer=1; if Flaply; break; / 点亮第一位数码管 case 1: cs1=0; disport=dis_buf1; dis_pointer=2; if Flaply; break; / 点亮第二位数码管 case 2: cs2=0; disport=dis_buf2; dis_pointer=3; if Flaply; break; case 3: cs3=0; / 点亮第三位数码管 disport=dis_buf3; dis_pointer=0; if Flaply; break;

19、default:break; /*- 闪烁函数-*/void Flaply switch / 据闪烁状态转相应位 case 0: if / 300ms到,关显示 cs0=1; break; case 1: if cs1=1; break; case 2: if cs2=1; break; case 3: if cs3=1; break; case 4: if / 300ms到,关显示 cs0=1; if cs1=1; if cs2=1; if cs3=1; break; default:break; 9调试要点9.1硬件调试1、硬件完成后,检查电路有无短路、断路或虚焊;2、电路板检查正常后,编

20、一段简单的显示程序,检验显示电路是否正常;3、若显示电路正常后,则可开始进行程序调试;4、动态显示时要注意任一时刻只能一个数码管工作;5、按键对应的I/O口要置为1。9.2软件调试1、软件平台采用WAVE6000;2、参考的子程序均用WAVE6000进行调试,确保结果正确;参考的子程序有:二翻十进制转换、拆字3、本设计要实现3种功能:时钟、秒表及四位抽奖机;调试时哪个功能不正常,则直接找相应的模块进行调试。9.3结果分析及设计工作总结1、实现功能:正常走时秒表及四位抽奖机。2、经验:通过本电路的设计使我更进一步了解了单片机89S52系列芯片的强大的功能,进一步熟悉89S52系列单片机的编程指令

21、集的实际应用,再次增强了自己的动手、思考能力,同时也体现了实践和理论相结合的要求。为将来步入社会奠定了基础。10参考文献及附件10.1参考文献10.1.1倪云峰单片机原理与应用.电子科技大学出版.200910.1.2华林,周小方编著电子设计竞赛实训教程:航空航天大学,2007,10.2元器件清单器件名称器件型号数量器件名称器件型号数量数码管共阳4单片机AT89S521电解电容10pF2三极管90124晶振12MHZ1电阻470欧9按键按键4电阻4K75电解电容220uf1电解电容220uf178051插槽10脚1-XTAL1反相器输入端:反相振荡器的放大器输入端和部时钟工作电路的输入端。多与XTAL2引脚一起连接晶体震荡器使用。若采用外部时钟源驱动器件,XTAL2应不接。-XTAL2反相器输出端:反相振荡器的放大器输出端。11PCB版图

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1