单片机四位抽奖机_第1页
单片机四位抽奖机_第2页
单片机四位抽奖机_第3页
单片机四位抽奖机_第4页
单片机四位抽奖机_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、漳州师范学院漳州师范学院 电子时钟及抽奖机 姓 名: 学 号: 系 别: 物理与电子信息工程系 专 业: 电子科学与技术 年 级: 09 级 指导教师: 白炳良 2012 年 5 月 目录目录1摘要摘要: 42关键字关键字: 53设计任务设计任务 53.1两种抽奖方式.53.2扩展功能扩展功能.54设计方案设计方案 54.1设计思路设计思路.54.2方案比较与论证方案比较与论证.54.3系统结构框图系统结构框图.65各功能模块设计65.1显示模块原理显示模块原理.65.2参数计算参数计算.75.3独立式按键模块独立式按键模块.75.4总系统原理图总系统原理图.86软件设计 96.1I/OI/O

2、 口分配口分配.96.2随机数算法随机数算法.106.3秒产生算法秒产生算法.106.4按键扫描按键扫描.106.5显示扫描显示扫描.107流程图流程图 10.108程序清单程序清单 149调试要点 299.1硬件调试.299.2软件调试.299.3结果分析及设计工作总结.2910参考文献及附件参考文献及附件3010.1参考文献.3010.2元器件清单.3011PCBPCB 版图版图 30.311摘要摘要:本设计由单片机 AT89S52 芯片和 LED 共阳数码管为核心,辅以必要的电路,构成了一个由单片机控制的四位显示设计,设计制作同步和单步抽奖机,在模式键、启动键,停止键的控制下实现设计集成

3、了时钟、秒表、四位抽奖三种功能于一体。2关键字关键字:AT89S52 动态显示 四位抽奖 按键扫描 随机数 秒表 3设计任务设计任务3.1两种抽奖方式3.1.1按抽奖启动键时,四位数码管以不同的随机数快速滚动显示,按抽奖停止键时,四位随机数停止滚动显示在数码管上。3.1.2按抽奖启动键时,个位数码管以随机数快速滚动显示,按抽奖停止键时,个位随机数停止滚动显示在数码管上;用同样的方法来确定十位、百位、千位的随机数。3.2扩展功能扩展功能电子时钟:电子钟以 99 时 59 分 59 秒为一个计数周期,在显示分秒,时分模块化之间切换。4设计方案设计方案4.1设计思路设计思路本设计需要实现两种方式的抽

4、奖(即四位同时抽和逐位抽奖) ,因此重点在于由软件产生随机数;而硬件则需由数码管来显示中奖结果以及按键来控制抽奖模式和启动、停止抽奖。系统以AT89S52为核心,主要有显示模块、按键模块和单片机软件控制模块构成。4.2方案比较与论证方案比较与论证数码管显示模块:方案一:单片机输出数据经译码芯片 CD4511 进行译码后直接驱动数码管,数码管公共端接 9012 三极管扩流,并通过单片机 I/O 口控制三极管的选通,实现动态显示。方案二:有单片机的 I/O 口直接驱动数码管的段码,数码管的公共端接 9012 三极管,通过灌电流的方式点亮数码管,也需通过单片机 I/O 口控制三极管的选通,实现动态显

5、示。由于所需 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显示模块显示模块原理原理由单片机(AT89S52)的引脚 P1 口输出中奖号码、时间等数据信息,通过片选信号 P2.0 、P2.1、P2.2、P2.4 就可在相应的数码管进行显示。当位选信号P2

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

7、a 到 g 对应的 I/O 口是 P1.0 到 P1.6,则要让数码管显示 0 到 6 对应的 16进值如图所示a7b6c4d2e1f9g10dt5com3com8SEG 3LE D8a7b6c4d2e1f9g10dt5com3com8SEG 1LE D8a7b6c4d2e1f9g10dt5com3com8SEG 2LE D8T1901 2T2901 2T3901 2T4901 2a7b6c4d2e1f9g10dt5com3com8SEG 4LE D8R1RE S2R2RE S2R3RE S2R4RE S2+5V+5V+5V+5Vhgfedcbadgfedcabhgfedcabhgfedcab

8、abcdefghP2.0P2.1P2.4P2.7R14RE SR13RE SR12RE SR11RE SR10RE SR9RE SR8RE SR7RE S图 3-1 显示电路图 3-2 码表5.2参数计算参数计算由于I/O 口高电平约等于 5V,使用灌电流的方式驱动数码管,故选用 PNP 型三极管 9012;数码管能正常工作的段电流为 3mA-10 mA,压降为 1.7V,三极管发射极和集电极的压降为 0.3V,因此限流电阻的压降为 3.0V,所以选用限流电阻的阻值 R=470 欧.500105mAVR5.3独立式按键模块独立式按键模块独立式按键是直接用 I/O 口线构成的单个按键电路,其特点

9、是每个按键单独占用一根I/O 口线,每个按键的工作不会影响其它 I/O 口线的状态。独立式按键的典型应用如(图3-3)所示。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根 I/O 口线,因此,P1.6P1.5P1.4P1.3P1.2P1.1P1.016 进制010000000C0H111110010F9H201001000A4H301100000B0H4001100199H5001001092H6000001082H在按键较多时,I/O 口线浪费较大,但本设计只用到三个按键,顾采用独立式按键电路。S2S3S4P3 .4P3 .0P3 .7图 3-3 独立式按键电路5.4总系统原理

10、图总系统原理图单片机(AT89S52)9 脚为复位输入端。上电复位,只要 RST 引脚上有大于二个机器周期以上的高电平,单片机(AT89C2051)即复位。按键从单片机(AT89S52)的 P2.0、P2.1、P2.2、P2.4 口接入,当按键被按下时,相应的输入口就会输入低电平 0。单片机(AT89S52)的 XTAL1 脚、XTAL2 脚接一个由 12M 晶振和 10pf 组成的振荡电路。为单片机提供相应的时序。10p FC1010p FC11XT 112M HZa7b6c4d2e1f9g10dt5com3com8SEG 3LE D8a7b6c4d2e1f9g10dt5com3com8SE

11、G 1LE D8a7b6c4d2e1f9g10dt5com3com8SEG 2LE D8S2S1RE SETS3S4T1901 2T2901 2T3901 2T4901 2a7b6c4d2e1f9g10dt5com3com8SEG 4LE D8R1RE S2R234K 7R2RE S2R3RE S2R4RE S2R22+5V+5V+5V+5VC12104+5VhgfedcbaP3.4P3.0P3.7dgfedcabhgfedcabhgfedcababcdefghP2.0P2.1P2.4P2.7abcdcgP07C2104D2D4D3D1132IC1780 5C1470 uFC4220 uFC3

12、104ISP1P1.5RSTP1.6P1.7+5V+5V+5vEA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P10/T1P11/T2P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10U189s 52fRSTRSTP1.5P1.6P1.7P2.0P2.1P2.4P2.7R14RE SR13RE SR12RE SR11RE SR10RE SR9R

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

14、后四位数码管均产生随机数,按 SW0 键停止抽奖(操作可重复) ;按 SW1 一次进入时间模块(可循环) 。按 RET 键单片机复位。6.1I/OI/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按键扫描按键扫描

15、 直接判断按键的按下与放开,不采用标志位判断。6.5显示扫描显示扫描显示扫描采用高、低两位分开显示;这样,在进行时钟显示及秒表显示时易于处7流程图流程图5ms 到?重新对计数器赋值调用按键扫描程序调用显示子程序调用闪烁子程序500ms到?F300cnt=0取反闪烁标志位根据 msta 的值进行散转数码显示初值四位数同时抽奖四位数逐位抽奖时钟显示分秒时钟显示时分Msta=1Msta=2Msta=3Msta=0Y YNMsta=0初始化N数码显示初值数码显示初值Esw9?Esw0?Esw9?Msta=1Msta=2Msta=3返回Msta=1:四位同时抽奖Esw0?cj!=cjCj=1?据 ran

16、d()产生随机数Esw1?ESW2?四位数码管闪烁返回Msta=2 Y YY YNNNNYYYNNNMsta=0:Msta=2:逐位产生随机数:Esw2=1?Msta=3据 pointer 转模块Pointer=0Esw0?Jc!=cjCj=1?产生个位随机数Esw1?Pointer=1YY Y返回NNN返回NYPointer=1Esw0?Jc!=cjCj=1?产生个位随机数Esw1?Pointer=2YY YNNN返回Pointer=2Esw0?Jc!=cjCj=1?产生个位随机数Esw1?Pointer=3YY YNN返回NN返回Pointer=3Esw0?Jc!=cjCj=1?产生个位随

17、机数Esw1?Pointer=3YYYNN返回1s 到?F200cnt=200F200cnt-Msta=3:+a秒个位a 送显a9?10s 到?a=0, +bNYN秒十位b 送显b5?1 分到?b=0, +cNY分个位d 送显c9?10 分到?NYc=0, +d分十位d 送显d5?1 时到?NYd=0, +e时个位e 送显e9?10 时到?NYe=0, +g时十位g 送显g9?99 时到?NYg=0Yesw1?Msta=0按下 esw0,转到 msta=4,显示小时、分钟8程序清单程序清单/*- 名称:四位抽奖机 编写:张小叶 日期:2012.5.4 平台:AT89S52-*/#include

18、#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 sw2=P37;/*- 定义变量-*/uchar data key; / 定义键值寄存器uchar bdata ekey; / 定义键沿寄存器uchar bd

19、ata 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=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 xff,0 xfc,0 x00,0 xf0,

20、0 x0f;/显示段码值uchar dis_buf=0 xC0,0 xC0,0 xC0,0 xC0,0 xff;/显示缓冲uchar dis_pointer,pointer;/定义显示指针/*- 函数声明-*/void Disply(); / 显示函数void Flaply(); /闪烁函数void KeyScan(); /读键函数void Init_timer0(); / 定时器初始化void choujiang_2(); /抽奖方式 2void dianzishizhong(); /电子时钟void dianzishizhongxiaoshi();/*- 主函数-*/void main()

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

22、数码显示初值 dis_buf1=0 xC0; dis_buf2=0 xA4; dis_buf3=0 xA4; 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=d

23、is_dmg; f200cnt=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

24、_buf2=dis_dmrand()%10;if(esw1) pointer=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_b

25、uf3=dis_dmd; /*- 定时器 0 初始化函数-*/ void Init_Timer0(void) TMOD = 0 x11; /定时器 0 工作在方式 1TH0=0 xec; TL0=0 x78; /定时器 5ms 初值 TR0= 1; /开定时器 0 /*- 键扫描函数-*/void KeyScan() uchar kbuf,keycnt; P2=0XFF;P3=P3|0X91; / 读独立按建 kbuf=P3;kbuf=(kbuf&0X91)0X91;lastkey=kbuf; if(lastkey!=key) / 键有变化?key 为电平,lastkey 为前沿 if

26、(keycnt-!=0) /键有变,计数到? lastkey=key; /放弃不稳定的键 else keycnt=0X05; / 重赋去抖值 ekey=(keylastkey)&lastkey; /键前沿提取 key=lastkey; /*- 显示函数-*/void Disply() disport=0 xff; P2=0 xff; switch(dis_pointer) / 根据显示指针,转相应显示位 case 0: cs0=0; / 点亮第零位数码管 disport=dis_buf0; dis_pointer=1; if(flaflag) Flaply(); break; / 点亮

27、第一位数码管case 1: cs1=0; disport=dis_buf1; dis_pointer=2; if(flaflag) Flaply(); break; / 点亮第二位数码管case 2: cs2=0; disport=dis_buf2; dis_pointer=3; if(flaflag) Flaply(); break;case 3: cs3=0; / 点亮第三位数码管 disport=dis_buf3; dis_pointer=0; if(flaflag) Flaply(); break;default:break;/*- 闪烁函数-*/void Flaply() switch(flasta)/ 据闪烁状态转相应位 case 0: if(f300flag) / 300ms 到,关显示 cs0=1;break;case 1: if(f300flag) cs1=1;break;case 2: if(f300flag) cs2=1;break;case 3: if(f300flag)

温馨提示

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

评论

0/150

提交评论