单片机四位抽奖机.docx
《单片机四位抽奖机.docx》由会员分享,可在线阅读,更多相关《单片机四位抽奖机.docx(13页珍藏版)》请在冰豆网上搜索。
单片机四位抽奖机
漳州师范学院
电子时钟及抽奖机
姓名:
学号:
系别:
物理与电子信息工程系
专业:
电子科学与技术
年级:
09级
指导教师:
白炳良
2012年5月
摘要:
本设计由单片机AT89S52芯片和LED共阳数码管为核心,
辅以必要的电路,构成了一个由单片机控制的四位显示设计,设计制作同步和单步抽奖机,在模式键、启动键,停止键的控制下实现设计集成了时钟、秒表、四位抽奖三种功能于一体。
关键字:
AT89S52动态显示四位抽奖按键扫描随机数秒表
设计任务
两种抽奖方式
按抽奖启动键时,四位数码管以不同的随机数快速滚动显示,按抽奖停止键时,四位随机数停止滚动显示在数码管上。
按抽奖启动键时,个位数码管以随机数快速滚动显示,按抽奖停止键时,个位随机数停止滚动显示在数码管上;用同样的方法来确定十位、百位、千位的随机数。
扩展功能
电子时钟:
电子钟以99时59分59秒为一个计数周期,在显示分秒,时分模块化之间切换。
设计方案
设计思路
本设计需要实现两种方式的抽奖(即四位同时抽和逐位抽奖),因此重点在于由软件产生随机数;而硬件则需由数码管来显示中奖结果以及按键来控制抽奖模式和启动、停止抽奖。
系统以AT89S52为核心,主要有显示模块、按键模块和单片机软件控制模块构成。
方案比较与论证
数码管显示模块:
方案一:
单片机输出数据经译码芯片CD4511进行译码后直接驱动数码管,数码管公共端接9012三极管扩流,并通过单片机I/O口控制三极管的选通,实现动态显示。
方案二:
有单片机的I/O口直接驱动数码管的段码,数码管的公共端接9012三极管,通过灌电流的方式点亮数码管,也需通过单片机I/O口控制三极管的选通,实现动态显示。
由于所需I/O口由AT98S52可直接提供,无须因为I/O口不够而用CD4511来节省I/O口,方案二又较方案一更容易实惠,所以,我选择方案二。
系统结构框图
AT89S52单片机在模式键、启动键和停止键的控制下,由P1口输出数据,通过、、、进行选通,有数码管显示信息。
系统框图:
图2-3系统总框图
各功能模块设计
显示模块原理
由单片机(AT89S52)的引脚P1口输出中奖号码、时间等数据信息,通过片选信号、、、就可在相应的数码管进行显示。
当位选信号为低电平时,P1口送出数据也为低电平就点亮数码管,电流灌进单片机。
多位LED显示,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制。
而共阳极公共端分别接一个9012,由相应的I/O口线控制9012,实现各位数码管的分时选通。
段选码,位选码每送入一次后延时10MS,因人的视觉暂留时间为(100MS),所以每位显示的时间不能超过20MS,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。
这种方式称为软件扫描方式。
电路如(图3-1)所示。
由于采用的是共阳极数码管,所以要让段码点亮需把I/O口置0,例如:
段码a到g对应的I/O口是到,则要让数码管显示0到6对应的16进值如图所示
图3-1显示电路
16进制
0
1
0
0
0
0
0
0
0C0H
1
1
1
1
1
0
0
1
0F9H
2
0
1
0
0
1
0
0
0A4H
3
0
1
1
0
0
0
0
0B0H
4
0
0
1
1
0
0
1
99H
5
0
0
1
0
0
1
0
92H
6
0
0
0
0
0
1
0
82H
图3-2码表
参数计算
由于I/O口高电平约等于5V,使用灌电流的方式驱动数码管,故选用PNP型三极管9012;数码管能正常工作的段电流为3mA--10mA,压降为,三极管发射极和集电极的压降为,因此限流电阻的压降为,
所以选用限流电阻的阻值R=470欧.
独立式按键模块
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
独立式按键的典型应用如(图3-3)所示。
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,但本设计只用到三个按键,顾采用独立式按键电路。
图3-3独立式按键电路
总系统原理图
单片机(AT89S52)9脚为复位输入端。
上电复位,只要RST引脚上有大于二个机器周期以上的高电平,单片机(AT89C2051)即复位。
按键从单片机(AT89S52)的、、、口接入,当按键被按下时,相应的输入口就会输入低电平0。
单片机(AT89S52)的XTAL1脚、XTAL2脚接一个由12M晶振和10pf组成的振荡电路。
为单片机提供相应的时序。
软件设计
主程序主要起到一个导向和决策功能,控制程序的走向。
本系统在主程序中运用模块化结构,所有控制量集中处理,提高了处理效率,并在RAM建立各控制量的映射,方便各功能模块的编程及修改。
运用散转结构,可实现无扰动重入。
本设计主要有以下几个模块:
时钟模块、四位抽奖模块、逐位抽奖模块。
操作说明:
上电复位后进入数码初显示模块;按SW0启动,四位数码管产生四位随机数,按SW0四位随机数停止(操作可重复);按SW1一次进入抽奖2模块;按SW0启动,四位数码管最低位产生随机数,按SW1最低位停止高位启动…按4次SW1后四位数码管均产生随机数,按SW0键停止抽奖(操作可重复);按SW1一次进入时间模块(可循环)。
按RET键单片机复位。
I/O口分配
1、、、、作为个位、十位、百位、千位数码管片选。
2、、、作为按键接口。
3、到作为段码a到g的输出口。
随机数算法
在随机数模式下,调用库函数,用dis_buf[i]=dis_dm[rand()%10]返回随机数值
秒产生算法
将定时器0定时5mS,每计数200次为1S。
按键扫描
直接判断按键的按下与放开,不采用标志位判断。
显示扫描
显示扫描采用高、低两位分开显示;这样,在进行时钟显示及秒表显示时易于处
流程图
N
5ms到
重新对计数器赋值
调用按键扫描程序
调用显示子程序
调用闪烁子程序
500ms到
F300cnt=0
取反闪烁标志位
根据msta的值进行散转
数码显示初值
四位数同时抽奖
四位数逐位抽奖
时钟显示分秒
时钟显示时分
Msta=1
Msta=2
Msta=3
Msta=0
Y
Y
N
Msta=0
初始化
Msta=0:
数码显示初值
Esw9
Esw0
Esw9
Msta=1
Msta=2
Msta=3
返回
Msta=1:
四位同时抽奖
Esw0
cj!
=cj
Cj=1
据rand()产生随机数
Esw1
ESW2
四位数码管闪烁
返回
Msta=2
Y
Y
Y
Y
N
N
N
N
Y
Y
Y
N
N
N
程序清单
/*-----------------------------------------------
名称:
四位抽奖机
编写:
张小叶
日期:
平台:
AT89S52
------------------------------------------------*/
#include<>
#include<>
#include<>
#defineuintunsignedint安电子科技大学出版.2009
张华林,周小方编著.电子设计竞赛实训教程[M].北京:
北京航空航天大学出版社,2007,7
元器件清单
器件名称
器件型号
数量
器件名称
器件型号
数量
数码管
共阳
4
单片机
AT89S52
1
电解电容
10pF
2
三极管
9012
4
晶振
12MHZ
1
电阻
470欧
9
按键
按键
4
电阻
4K7
5
电解电容
220uf
1
电解电容
220uf
1
7805
1
插槽
10脚
1
-XTAL1(反相器输入端):
反相振荡器的放大器输入端和内部时钟工作电路的输入端。
多与XTAL2引脚一起连接晶体震荡器使用。
若采用外部时钟源驱动器件,XTAL2应不接。
-XTAL2(反相器输出端):
反相振荡器的放大器输出端。
PCB版图