rand()产生随机数,头文件加#include<stdlib.h> 中
下面是案例:
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define _nops() {_nop_();_nop_();_nop_();_nop_();}
sbit K1=P1^4;
sbit BEEP=P2^7;
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
void speak();
bit Busy();
uchar code biaoti [] = {"^-^99 table ^-^"}; //标题字符串
uchar data plany_num[] = {" "}; //乘法口诀表达式
void delay(uint x); //延时
void beep(); //蜂鸣器
bit BUSY(void); //测忙
void Write_cmd(uchar cmd); //写指令
void Write_dat(uchar dat); //写数据
void LCD_chushihua(); //初始化LCD
void display(uchar *abc,uchar lineno) //显示函数
{
uchar k;
Write_cmd(lineno | 0x80); // 传地址
for(k=0;k<16;k++)
Write_dat(abc[k]); //传数字与符号过来 a.被乘数 b.乘数 c.积
}
void random_num() //随机生成被乘数,乘数算出乘积
{
uchar a,b,c1,c2;
//---------------------------------------------------随机数处理
a = rand()%9+1; //被乘数 rand()产生随机数a函数
//rand()%9表示随机产生的最大值为(9-1)就是8,因此要加1
b = rand()%9+1; //乘数
c1 = a*b/10; //十位
c2 = a*b%10; //个位
plany_num[3] = a+'0'; //0x40 + 3,放被乘数
plany_num[5] = '*'; //0x40 + 5,放被乘号
plany_num[7] = b+'0'; //0x40 + 7,放乘数
plany_num[9] = '='; //0x40 + 9,放被‘=’号
plany_num[11]= c1+'0'; //0x40 + 11或12,放结果
plany_num[12]= c2+'0';
if( c1 == 0) plany_num[11]=' ';//当乘积的十位数即数组中的第9位为0时不显示
}
void main()
{
P0= P2=0xff;
delay(10);
LCD_chushihua(); //初始化LCD
display(biaoti,0x00);//在第一行显示标题
while(1)
{
if(K1==0) //按键取随机数
{
speak();
delay(10);
while(K1==0); //等待K1键释放
random_num();
}
display(plany_num,0x40); //指定第二行放数的位置
delay(100);
}
}
//----------------------------- LCD1602七七八八-------------------------------------------
bit BUSY(void) //测忙
{
bit panmang;//定义一个位 panmang(判忙),只有0与1,丢到while(BUSY())中.
RS = 0;
RW = 1;
EN = 1;
delay(1);
panmang = (bit)(P0 & 0x80); //最高位为判忙信号位 panmang = 1为忙,反之不忙,可执行后面语句
EN = 0;
return panmang;
}
void Write_cmd(uchar cmd) //写指令
{
while(BUSY()); //测忙
RS = 0; // RS = 0;是写指令
RW = 0;
EN = 0;
P0 = cmd;
EN = 1;
delay(1);
EN = 0;
}
void Write_dat(uchar dat)
{
while(BUSY()); //测忙
RS = 1; // RS = 1;是写数据
RW = 0;
EN = 0;
P0 = dat;
EN = 1;
delay(1);
EN = 0;
}
void LCD_chushihua() //LCD初始化
{
Write_cmd(0x38); //功能设置
delay(1);
Write_cmd(0x0c); //显示开关控制
delay(1);
Write_cmd(0x06); //输入方式设置
delay(1);
Write_cmd(0x01); //清除LCD的显示内容
delay(1);
}
void delay(uint x) //延时
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
void speak() //蜂鸣器
{
uchar i,j;
for(i=0;i<180;i++)
{
for(j=0;j<50;j++); BEEP=!BEEP;
}
delay(300);BEEP=0;
}
|