 ;********WAVE-E6000/T************************** ;*MCU: AT89C51 * ;*MCU-crystal: 6M * ;*Version: 00 * ;*Last Updata: * ;*Author: www.picavr.com * ;*Description: 用隨機(jī)種子x=k,隨機(jī)產(chǎn)生[0,99] * ; 區(qū)間的數(shù)在P0、P2口顯示 * ;********************************************** #include <reg51.h> #define a 25173 #define b 13849 #define c 65536 unsigned char h,l; unsigned int i,j,k; unsigned long x; unsigned char led[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; sbit bb=P3^7; bit flag; void delay(i) { while(i--) { j=7650;while(j--);} } void key_int(void) interrupt 0 using 1 { flag=1;} void main(void) { P1=0xfe; /* 定義 0 鍵產(chǎn)生 INT0 中斷 */ IE=0x81; while(1) { for(k=0;k<=65535;k++) /* 隨機(jī)產(chǎn)生種子k */ { if(flag==1) /* 中斷發(fā)生 */ { EX0=0; /* 關(guān)閉中斷 */ bb=0;delay(1);bb=1; x=k; /* k 轉(zhuǎn)換為長(zhǎng)整型 x */ x=(a*x+b)%c; /* 產(chǎn)生隨機(jī)數(shù) */ x=x*100/c; /* 轉(zhuǎn)換為[0-99]的數(shù) */ h=x/10;l=x%10; /* 分解為十位和個(gè)位 */ if(h==0)P0=0xff; else P0=led[h]; /* 顯示十位 */ P2=led[l]; /* 顯示個(gè)位 */ delay(20); P0=0xff;P2=0xff; flag=0;EX0=1; /* 開啟中斷 */ } } } }
|