标题:
使用随机函数3位数码管抽奖单片机程序
[打印本页]
作者:
啦啦啦1234
时间:
2018-3-7 23:20
标题:
使用随机函数3位数码管抽奖单片机程序
/*在本论坛找到的资料
非常感谢:
lyh一点点
的
《
基于单片机的5位显示抽奖器(含仿真和程序)
》
在《
基于单片机的5位显示抽奖器
(含仿真和程序)》
的基础上做出的修改(595控制数码管)
由于手头只有三极管控制的共阳数码管模块,所以自己修改程序
随机显示范围可以自行修改:把270改成任意数
num=rand()%270; //获得0~270之间的随机
randdata=rand()%(300-200+1)+200 //获得200~300之间的随机数*/
//以下为程序源码:
#include <reg52.h>
#include <intrins.h>
#include <stdlib.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]= //共阳数码管编码0~F
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xc0,0x86,0x8e};
uchar ge,shi,bai,t;
uint num;
sbit key1=P2^0;
sbit D1=P1^1;
sbit D2=P1^2;
sbit D3=P1^3;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display()
{
bai=num/100; //输出百位
shi=num%100/10;//输出十位
ge=num%10; //输出个位
D1=0;
P0=table[bai];
delay(10);
P0=0xff;
D1=1;
D2=0;
P0=table[shi];
delay(10);
P0=0xff;
D2=1;
D3=0;
P0=table[ge];
delay(10);
D3=1;
}
void key()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
while(!key1);
TR0=~TR0;
srand(t); //初始化种子,函数srand(t)在stdlib.h
}
}
}
void main()
{
// EX0=1; //使能外部中断0
// IT0=1; //设置外部中断0触发方式为低脉冲
num=0;
EA=1; //开总中断
ET0=1;
TMOD=0x01; //设置T1工作方式
TH0=(65536-45872)/256; //50ms定时
TL0=(65536-45872)%256;
TR0=0;
while(1)
{
key();
display();
}
}
void T0_time() interrupt 1
{
// ET0=0; //首先关闭中断
TH0=(65536-45872)/256; //然后重新装入预制值
TL0=(65536-45872)%256;
// ET0=1; //打开T0中断
t++;
if(t==20) //如果到了20次,说明1000ms时间到
{
t=0; //然后把t清零
}
num=rand()%270; //获得0~270之间的随机数,函数rand()在stdlib.h
//randdata=rand()%(300-200+1)+200 //获得200~300之间的随机数,函数rand()在stdlib.h
}
/*
EX_INT0() interrupt 0 using 1 //外部中断0服务函数
{
if(TR0==1) //判断当前定时计数器的状态
{
TR0=0;
}
else
{
TR0=1;
srand(t); //初始化种子,函数srand(t)在stdlib.h
}
}
*/
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1