标题:
51单片机四位抽奖机制作 带时钟功能 附源程序
[打印本页]
作者:
Longing
时间:
2019-8-1 21:21
标题:
51单片机四位抽奖机制作 带时钟功能 附源程序
之前的帖子已经有在开发板上测试了一下,现在补充一个完整版,自己做了一个板,扩展了交流稳压输入模块,可实现的功能有上电初始化显示,四位同时抽奖,逐位抽奖,以及实时时钟,程序,原理图,制作出来的实物图如下:
1.jpg
(157.27 KB, 下载次数: 75)
下载附件
2019-8-2 04:29 上传
电路原理图如下:
原理图.jpg
(268.24 KB, 下载次数: 65)
下载附件
2019-8-1 21:16 上传
如有不足的地方可以再交流一下哈,相互学习学习
单片机源程序如下:
#include <reg52.h>
#include <stdio.h>
#include <stdlib.h>
#include <main.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code table_disp[]={0x05,0xaf,0x46,0x86,0xac,0x94,0x14,0xa7,0x04,0x84};//段码表
/* 0 1 2 3 4 5 6 7 8 9 */
unsigned char code table_clock[]={0x01,0xab,0x42,0x82,0xa8,0x90,0x10,0xa3,0x00,0x80};//时钟段码表
uchar t2; //1s计数
uchar p;
uchar msta; //散转变量
uchar hour,minute,second;
uchar q,w,e,r,y,u;
/**************函数声明******************/
void init();
void keyscan();
void disp(uchar x3,uchar x2,uchar x1,uchar x0,bit s,uchar x);
//程序开始部分
void main(){
init();
while(1)
{
while(!TF0);
TH0=0xEC;
TL0=0x78;
TF0=0;
t2++;
keyscan();
disp(q,w,e,r,y,u);
if(t2==200)
{
t2=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
hour=0;
}
}
}
switch(msta)
{
case 0:
{
q=0;
w=2;
e=3;
r=4;
if(key1==1)
{ msta=1;
led1=0;
p=0;}
break;}
case 1:
{
if(p==0)
{q=rand()%10;
w=rand()%10;
e=rand()%10;
r=rand()%10;}
if(key1==1)
{ key1=0;
msta=2;
led1=1;
led2=0;
p=0;}
if(key2==1)
p=1;
if(key3==1)
p=0;
break;}
case 2:
{
switch(p)
{
case 0:
r=rand()%10;
case 1:
e=rand()%10;
case 2:
w=rand()%10;
case 3:
q=rand()%10;
break;
}
if(key2==1)
p++;
if(key3==1)
p=0;
if(key1==1)
{ msta=3;
led2=1;
led3=0; }
break;
}
case 3:
{
y=1;
u=1;
q=hour/10;
w=hour%10;
e=minute/10;
r=minute%10;
if(key2==1)
{ hour++;
if(hour==24)
hour=0;}
if(key3==1)
{ minute++;
if(minute==60)
minute=0;}
if(key1==1)
{ msta=0;
y=u=0;
led3=1; }
break;
}
}
}}
/**************************
初始化函数定义
**************************/
void init(){
led0=0;
msta=0;
hour=12;
minute=30;
TMOD=0x01; //选择定时器0,工作方式1
TH0=0xEC; //5ms计数初值
TL0=0x78;
TR0=1;
}
/**************************
显示函数定义
**************************/
void disp(uchar x0,uchar x1,uchar x2,uchar x3,bit s,uchar x)
{static uchar dsbit,cut300;bit s300;
cs0=1;cs1=1;cs2=1;cs3=1; //关显示
switch(dsbit)
{
case 0:
{
if(x==1)
P0=table_clock[x0];
else
P0=table_disp[x0];
cs0=0;
dsbit=1;
break;
}
case 1:
{
if(x==1)
P0=table_clock[x1];
else
P0=table_disp[x1];
cs1=0;
dsbit=2;
break;
}
case 2:
{
P0=table_disp[x2];
cs2=0;
dsbit=3;
break;
}
case 3:
{
P0=table_disp[x3];
cs3=0;
dsbit=0;
break;
}
}
cut300++;
if(cut300==100)
{ s300^=1;
cut300=0;}
if(s&&s300)
{ dot=1;
}
return;
}
复制代码
以上程序51hei下载地址:
源程序.docx
(15.62 KB, 下载次数: 35)
2019-8-1 21:18 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
大佬教我单片机
时间:
2020-4-17 17:40
楼主好,我也想做一个这个东西,可以详细介绍一下需要什么零件吗?AT89S52,还有其他配件是什么型号呢?
作者:
大佬教我单片机
时间:
2020-4-17 19:30
你好,我是刚学单片机的萌新,想学做你的这个东西,可以留个联系方式吗?
作者:
Longing
时间:
2021-3-31 22:30
有段时间没来论坛了,有问题的可以私信我
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1