打印

初学者们快来看!新增加的好玩程序!单片机抽奖

[复制链接]
2802|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ahai0306|  楼主 | 2008-5-27 23:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
此程序,上电就开始选号,并从液晶屏上能看出选的很快,按中断按键停止,选出一组号码
再按中断按键,又开始选号,反复选……
这次觉得选的不好,再来一次,……
选好了号可要去买啊,不然中不了的……
 此程序,原创,好玩增加兴趣,选取的号码可以在液晶上显示, 

大家都来发财吧,即使发不了财,也是给福利事业做贡献,顺便还学习了单片机,这么多好处啊

太长了,不发了,大家来我的博客和电子爱好者自由发起的论坛来看吧
我的博客:http://blog.**/ahai0306/119263/message.aspx 
论坛贴子:http://dianzi.5d6d.com/thread-729-1-1.html 
相关链接:http://blog.**/ahai0306/119263/message.aspx

相关帖子

沙发
ahai0306|  楼主 | 2008-5-28 09:23 | 只看该作者

比较好玩的

本程序克服会选重号的缺点,选号没有规律,
机选彩票,增加学习单片机的兴趣!
相关链接:http://blog.**/ahai0306/119263/message.aspx

使用特权

评论回复
板凳
ahai0306|  楼主 | 2008-5-29 09:44 | 只看该作者

程序贴上

/*
***************************************************************************
*                   (C) Copyright 2008,单片机初学者园地
*                          All Rights reserved.
*
*项目名称:    51单片机学习开发系统               
*本文件名称:caipiao.c 
*       
* 完成作者 : 单片机初学者(QQ:50501160)  
* 当前版本 : V1.0        
* 完成日期 : 2008年5月27日
* 描    述 :  
*                此程序实现,30选7的福利彩票机选程序,单片机选的号能中大奖品啊,呵呵
*                           
****************************************************************************
*/

#include <reg52.h>       //调用头文件(单片机内部的寄存器定义)
#include <stdlib.h>

/*从一组n项的数组中随机抽了不同的m项(m<=n)*/

#define n 30
#define m 7
/******本段为硬件I/O口定义********/
sbit    KEY0   = P0 ^ 0;     //KEY和发光管复用,请将4个跳线插到KEY端
sbit    KEY1   = P0 ^ 1;
sbit    KEY2   = P0 ^ 2;
sbit    KEY3   = P0 ^ 3;
sbit    DIG0   = P0 ^ 4;     //数码管位0
sbit    DIG1   = P0 ^ 5;     //数码管位1
sbit  BUZZ   = P3 ^ 3;  //蜂鸣器
sbit  LCD_RW = P3 ^ 6;  
sbit  LCD_RS = P3 ^ 7;  
sbit  LCD_E  = P3 ^ 4;
#define  LED_SEG    P1      //数码管
#define  LCD_DATA   P2      //LCD
#define  LCD_BUSY   0x80    // 用于检测LCD的BUSY标识
void  lcd_init(void);
void  display_string(unsigned  char x,unsigned  char y,unsigned  char *s);
void  display_char(unsigned  char x,unsigned  char y,unsigned  char dat);

//函数声明
/**************************************************
** 函数名称: dellay
** 入口参数:h(unsigned int型)
** 出口参数:无
** 功能描述: 短暂延时,使用11.0592晶体,约0.01MS
****************************************************/

void dellay(unsigned int  h)
{
  while(h--);      //0.01MS
}
bit   start_stop;         

/************主程序**************/
main()
{  
     int i, j, k,logic, a[ m ];                /*把随机数保存到a[m]*/   
   IT0=1;     //外部中断0下降沿触发
   EX0=1;   //开外部中断0
   EA=1;   //开所有中断
   lcd_init();
   display_string(0,0,"30-7:");
   start_stop=1;                  
while(1)
{
if(start_stop==1)
  {for ( i = 0; i < m; i++ )
  {
   do  {          /*新产生的随机数与a[m]中的每项进行比较*/
       logic = 0;
    k= rand( );
       a[ i ] = k % n + 1;    /*产生1~n范围的随机数*/
       for( j = 0; j < i ; j++) {
           if( a[ j ] == a[ i ] ) {
                  logic = 1;         /*随机数与a[m]中的相同*/
                  break;
             }
       } /* end for */
   }while( logic );
   
   }/* end for*/
    {
     display_char(6,0,a[ 0 ]/10+0x30);
        display_char(7,0,a[ 0 ]%10+0x30);
  display_char(9,0,a[ 1 ]/10+0x30);
        display_char(10,0,a[ 1 ]%10+0x30);
  display_char(12,0,a[ 2 ]/10+0x30);
        display_char(13,0,a[ 2 ]%10+0x30);
  display_char(4,1,a[ 3 ]/10+0x30);
        display_char(5,1,a[ 3 ]%10+0x30);
  display_char(7,1,a[ 4 ]/10+0x30);
        display_char(8,1,a[ 4 ]%10+0x30);
  display_char(10,1,a[ 5 ]/10+0x30);
        display_char(11,1,a[ 5 ]%10+0x30);
  display_char(13,1,a[ 6 ]/10+0x30);
        display_char(14,1,a[ 6 ]%10+0x30);
     }
   dellay(1000);
     }
}
   
/* end main */
void int0_ISR (void) interrupt 0
{
  EA=0;
   dellay(1000);   //软件去抖
  start_stop=!start_stop;
  if(!start_stop)
  {
    BUZZ   = 0;
    dellay(500);
    BUZZ   = 1;
  }
  EA=1;
}
//写数据
void  WriteDataLcd(unsigned  char wdata)
{
   LCD_DATA=wdata;
   LCD_RS=1;
   LCD_RW=0;
   LCD_E=0;
   dellay(100);     //短暂延时
   LCD_E=1;
}
//写命令
void  WriteCommandLcd(unsigned  char wdata)
{
   LCD_DATA=wdata;
   LCD_RS=0;
   LCD_RW=0;
   LCD_E=0;
   dellay(100);      //短暂延时
   LCD_E=1;
}
//LCD初始化
void  lcd_init(void)
{
   LCD_DATA=0;
   WriteCommandLcd(0x38);
   dellay(1000);
   WriteCommandLcd(0x38);
   dellay(1000);
     WriteCommandLcd(0x38); //显示模式设置
     WriteCommandLcd(0x08); //关闭显示
     WriteCommandLcd(0x01); //显示清屏
     WriteCommandLcd(0x06); //显示光标移动设置
     WriteCommandLcd(0x0c); //显示开及光标移动设置
}
//设置光标
void  display_xy(unsigned  char x,unsigned  char y)

    if(y==1)
   x+=0x40;
  x+=0x80;
  WriteCommandLcd(x);
}
//显示单个字符
void  display_char(unsigned  char x,unsigned  char y,unsigned  char dat)
{
  display_xy(x,y);
  WriteDataLcd(dat);
}
//显示字符串
void  display_string(unsigned  char x,unsigned  char y,unsigned  char *s)
{
  display_xy(x,y);
  while(*s)
  {
   WriteDataLcd(*s);
   s++;
  }
}
相关链接:http://blog.**/ahai0306/119263/message.aspx

使用特权

评论回复
地板
huangqi412| | 2008-5-29 12:12 | 只看该作者

看下

使用特权

评论回复
5
古道热肠| | 2008-5-29 12:30 | 只看该作者

生成的100个号码再储存下来

待到开奖后,输入官方中奖号码,看看中奖率是多少,才更有趣味性。

使用特权

评论回复
6
ahai0306|  楼主 | 2008-5-31 13:52 | 只看该作者

呵呵,楼上的说的几率了

不过按几率算当然中奖率很小的,……
彩票偶尔买两张还可以,不能贪多的

使用特权

评论回复
7
yysmcu| | 2008-5-31 14:14 | 只看该作者

那写出来试试看啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

158

帖子

1

粉丝