您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机用AVR单片机8位数据产生随机数 正文
用AVR单片机8位数据产生随机数

用AVR单片机8位数据产生随机数

点击数:7888 次   录入时间:03-04 11:44:18   整理:http://www.55dianzi.com   AVR单片机
  15    Q14 ⊕ Q15
  16    Q4 ⊕ Q13 ⊕ Q15 ⊕ Q16


以8X8 LED阵列,开机时为了避免被使用者预测出压按时间对应随机数的变化值,故LED字幕以广告动画画面显示,并令随机数随着变化使无法预测随机数起始值,广告动画面共有四张,每张有8位数据。见”org   dpfstb”;

由按钮(PD1)按下,AVR用8位数据产生随机数,由PORTA 口及PORTC 口输出随机数,在8X8 LED上显示好玩的真实的按钮猜数。
.include "8515def.inc"
.def    peed    =r16
.def    DSPn    =r17   ;存显示初始动画次数
.def    temp2   =r18
.def    temp1   =r19
.def    temp    =r20
.def    scndp   =r21 
.def    cnt     =r22
.def    rdata   =r23        ;存随机种子数
.def    rdata9  =r24
.equ    dpfstb  =0x01e0     ;大小矩形图表首址
.equ    randtb  =0x0210     ;随机数种子表首址
.equ    numbertb=0x0240     ;0-9数字表首址
.org  $0000
    rjmp    RESET        ;Reset Handle
.cseg
.org $0010
RESET:  ldi     peed,high(RAMEND)   ;设置堆栈$25F,见器件配置文件"8515def.inc"
        out     SPH,peed
        ldi     peed,low(RAMEND)
        out     SPL,peed
        ldi     peed,0xff    ;对口初始化, 
        out     ddra,peed    ;设A口为输出
        out     ddrc,peed    ;设C口为输出
        ldi     peed,0xfd    ;PD1作输入,且接内部上拉电阻
        out     ddrd,peed    ;PD1为输入,其余为输出
        ldi     peed,0xff    ;关D口
        out     portd,peed
        ldi     peed,0x13    ;显示画面次数
start:  ldi     dspn,0x06    ;显示初始动画
        ldi     zh,high(dpfstb*2)  
        ldi     zl,low(dpfstb*2)  
dspFM:  rcall   ldtb8        ;调用程序区数送到内存RAM
        ldi     temp2,0xa0    ;显示动画面次数
dspfm1: rcall   sCAN1        ;调用从内存取数显示一次
        sbis    PINd,01        ;I/O口的位被置位跳行,检测到PD1按下否
        rjmp    getseed     ; 检测到PD1按下转
        dec     temp2        ;-1
        brne    dspfm1        ;不为0转
        dec     dspn        ; 初始画面次数-1
        brne    dspfm        ; 不为0转
        rjmp    start        ;转到显示初始动画
getseed:inc     temp        ;+`1,根据PD1按下的时间,选择随机数种子
        sbis    pind,01        ; I/O口的位被置位跳行,检测到PD1按下否
        rjmp    getseed        ; 检测到PD1按下,继续计数
        andi    temp,0x1f    ;按钮松开,取随机数种子与0X0F加
        ldi     zh,high(randtb*2)
        ldi     zl,low(randtb*2)
        add     zl,temp
        lpm
        mov     rdata,r0    ;得到随机数种子
next:   ldi     dspn,0x08   ;显示8个不同的随机数;
repeet: rcall   randm        ;调用产生随机数子程序
        rcall   dspnumber    ;调用显示8个不同的随机数
        dec     dspn        ;-1
        brne    repeet        ;dspn不为0转
        rcall   randm        ; 调用产生随机数子程序
guess1: rcall   dspnumber   ;调用显示同一随机数,直到有键按下
        sbIC    pind,01     ;松开后再往下执行(I/O口清零跳行)
        rjmp    guess1         ;转显示同一随机数,直到有键按下
wait:   rcall   dspnumber    ;
        sbis    pind,01
        rjmp    wait         ;等待按钮按下
        ldi     rdata9,0x03         ;显示动画三次
start0: ldi     dspn,0x06           ;每次显示六幅画面

上一页  [1] [2] [3] [4]  下一页


本文关键字:单片机  AVR单片机单片机-工控设备 - AVR单片机