EDN首页   博客首页

日志档案

发表于 2008-5-27 22:54:26

5

标签: 彩票  开发板  学习板  入门  

开发板新增程序(单片机选彩票,中大奖!)

开发板新增加的此程序,上电就开始选号,并从液晶屏上能看出选的很快,按中断按键停止,选出一组号码
再按中断按键,又开始选号,反复选……
这次觉得选的不好,再来一次,……
选好了号可要去买啊,不然中不了的……


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

此程序比较好玩,买过开发板的可以试验啊,选择的号码通过液晶显示出来

开发板继续160元包快递费!

51开发板五一推出新组合!方便扩展!特价!

http://blog.ednchina.com/ahai0306/111360/message.aspx (详细介绍开发板)

/*
***************************************************************************
*
*                   (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++;
  }
}
 
点击下载

系统分类: 单片机   |   用户分类: 无分类   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(842)    回复(2)  

投一票您将和博主都有获奖机会!

最新评论

  • mcu51

    2008-5-28 9:24:39

    好玩,增加学习兴趣,选号没有规律!

  • craftor

    2008-6-1 23:50:23

    顶一下! 不过本人不买彩票的啊,呵呵