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

大家都来发财吧,即使发不了财,也是给福利事业做贡献,顺便还学习了单片机,这么多好处啊
此程序比较好玩,买过开发板的可以试验啊,选择的号码通过液晶显示出来
开发板继续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++;
}
}

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