当前位置:首页 > 单片机 > 单片机
[导读] 源程序:SLAVR737.ASM用AVR 单片机 8位数据产生随机数,由PORTA口及PORTC口输出随机数,在8X8LED上显示,硬件接线电路见“7.3.8按钮猜数”。随机数的种子由程序设定(也可外接开关设定),启动种子后,由移位

源程序:SLAVR737.ASM
用AVR 单片机 8位数据产生随机数,由PORTA口及PORTC口输出随机数,在8X8
LED上显示,硬件接线电路见“7.3.8按钮猜数”。随机数的种子由程序设定(也可外接开关设定),启动种子后,由移位寄存器以互斥的异或逻辑组合返回循环产生。


.include"8515def.inc"
rjmpRESET
.deftemp=r16;暂存器
.deftemp1=r17;暂存器1
.defudata=r21;存随机数送A口
.defddata=r22;存随机数送C口
.cseg
.org0x10
RESET:lditemp,high(RAMEND);设堆栈指针
outSPH,temp
lditemp,low(RAMEND)
outSPL,temp

lditemp,0xff;设A口、C口为输出
outddra,temp;送方向寄存器A
outddrc,temp;送方向寄存器C
start:wdr;关看门狗
ldiudata,0x6a;设置随机数初值
ldiddata,0x3c;
startp:outporta,udata;输出到A口
outportc,ddata;输出到C口
lditemp,0x80;设延时常数
rcalldelay;调用延时子程序
rcallrandm;调用十六位随机数子程序
rjmpstartp
delay:;通用延时子程序从略
....
16位移位产生随机数原理图
8~16位移位寄存器产生随机数循环组合
位数循环输入组合S=2^n-1QnXORQm
8Q2⊕Q3⊕Q4⊕Q8(现程序按钮猜数采用8位数)
9Q5⊕Q9
10Q7⊕Q10
11Q9⊕Q11
12Q2⊕Q10⊕Q11⊕Q12
13Q1⊕Q11⊕Q12⊕Q13
14Q2⊕Q12⊕Q13⊕Q14
15Q14⊕Q15
16Q4⊕Q13⊕Q15⊕Q16

randm:;产生十六位随机数子程序
MOV temp,udata;产生A口随机数
MOV temp1,udata;
roltemp;通过进位位左循环移位
eortemp1,temp;异或
roltemp;通过进位位左循环移位
roltemp;通过进位位左循环移位
eortemp1,temp;异或
MOV temp,ddata;产生C口随机数
swaptemp;通过进位位左循环移位
eortemp,temp1;异或通过进位位左循环移位
roltemp;通过进位位左循环移位
rolddata;通过进位位左循环移位
roludata;通过进位位左循环移位
ret;子程序返回
7.3.8按钮猜数程序
源程序:SLAVR738.ASM
许多场合如按钮猜数(电脑摇奖,电脑选出幸运号),游戏开始按钮等待一个不规则且不定序的数据产生,即须要随机数发生器。随机数的种子由程序设定(也可外接开关设定),启动种子后,由移位寄存器以互斥的异或逻辑组合返回循环产生。产生随机数的原理图如下:
16位移位产生随机数原理图
8~16位移位寄存器产生随机数循环组合
位数循环输入组合S=2^n-1QnXORQm
8Q2⊕Q3⊕Q4⊕Q8(现程序按钮猜数采用8位数)
9Q5⊕Q9
10Q7⊕Q10
11Q9⊕Q11
12Q2⊕Q10⊕Q11⊕Q12
13Q1⊕Q11⊕Q12⊕Q13
14Q2⊕Q12⊕Q13⊕Q14
15Q14⊕Q15
16Q4⊕Q13⊕Q15⊕Q16


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

由按钮(PD1)按下,AVR用8位数据产生随机数,由PORTA口及PORTC口输出随机数,在8X8LED上显示好玩的真实的按钮猜数。
.include"8515def.inc"
.defpeed=r16
.defDSPn=r17;存显示初始动画次数
.deftemp2=r18
.deftemp1=r19
.deftemp=r20
.defscndp=r21
.defcnt=r22
.defrdata=r23;存随机种子数
.defrdata9=r24
.equdpfstb=0x01e0;大小矩形图表首址
.equrandtb=0x0210;随机数种子表首址
.equnumbertb=0x0240;0-9数字表首址
.org$0000
rjmpRESET;ResetHandle
.cseg
.org$0010
RESET:ldipeed,high(RAMEND);设置堆栈$25F,见器件配置文件"8515def.inc"
outSPH,peed
ldipeed,low(RAMEND)
outSPL,peed
ldipeed,0xff;对口初始化,
outddra,peed;设A口为输出
outddrc,peed;设C口为输出
ldipeed,0xfd;PD1作输入,且接内部上拉电阻
outddrd,peed;PD1为输入,其余为输出
ldipeed,0xff;关D口
outportd,peed
ldipeed,0x13;显示画面次数
start:ldidspn,0x06;显示初始动画
ldizh,high(dpfstb*2)
ldizl,low(dpfstb*2)
dspFM:rcallldtb8;调用程序区数送到内存RAM
lditemp2,0xa0;显示动画面次数
dspfm1:rcallsCAN1;调用从内存取数显示一次
sbisPINd,01;I/O口的位被置位跳行,检测到PD1按下否
rjmpgetseed;检测到PD1按下转
dectemp2;-1
brnedspfm1;不为0转
decdspn;初始画面次数-1
brnedspfm;不为0转
rjmpstart;转到显示初始动画
getseed:inctemp;+`1,根据PD1按下的时间,选择随机数种子
sbispind,01;I/O口的位被置位跳行,检测到PD1按下否
rjmpgetseed;检测到PD1按下,继续计数
anditemp,0x1f;按钮松开,取随机数种子与0X0F加
ldizh,high(randtb*2)
ldizl,low(randtb*2)
addzl,temp
lpm
MOV rdata,r0;得到随机数种子
next:ldidspn,0x08;显示8个不同的随机数;
repeet:rcallrandm;调用产生随机数子程序
rcalldspnumber;调用显示8个不同的随机数
decdspn;-1
brnerepeet;dspn不为0转
rcallrandm;调用产生随机数子程序
guess1:rcalldspnumber;调用显示同一随机数,直到有键按下
sbICpind,01;松开后再往下执行(I/O口清零跳行)
rjmpguess1;转显示同一随机数,直到有键按下
wait:rcalldspnumber;
sbispind,01
rjmpwait;等待按钮按下
ldirdata9,0x03;显示动画三次
start0:ldidspn,0x06;每次显示六幅画面
ldizh,high(dpfstb*2)
ldizl,low(dpfstb*2)
dspfm0:rcallldtb8;调用从Z指向的程序区取数据送到内存0080-0087中
lditemp2,0xa0;显示次数
dspfm1a:rcallscan1;调用从内存0080-0087中取数据显示一次
dectemp2;-1
brnedspfm1a;不为0转
decdspn;显示初始动画次数-1
brnedspfm0;不为0转
decrdata9;显示动画三次-1
brnestart0;不为0转
rjmpnext;转显示8个不同的随机数
dspnumber:;显示一个0-9数字的子程序
ldizh,high(numbertb*2)
ldizl,low(numbertb*2)
addzl,rdata9
rcallldtb8;取数
lditemp2,0xa0;该数字重复显示A0H次
dspn1:rcallscan1
dectemp2
brnedspn1
ret
scan1:pushxl;从内存0080-0087中取数据显示一次
lditemp,0b01111111
MOV scndp,temp
ldicnt,0x08
col1:outportc,scndp;显示屏幕的一列
ldr1,x+
outporta,r1
rcalldelay
sec
rorscndp
deccnt
brnecol1
popxl
ret
ldtb8:ldixl,0x80;从Z指向的程序区取数据送到内存0080-0087中
ldixh,0x00
lditemp1,0x08
pushxl
nexld1:lpm
stx+,r0
ldr0,z+
dectemp1
brnenexld1
popxl
ret
delay:;通用延时子程序从略
....
randm: MOV temp,rdata;产生8N(0≤N≤9)随机数子程序
MOV temp1,rdata
swaptemp1
eortemp,temp1
roltemp1
eortemp,temp1
roltemp1
eortemp,temp1
roltemp
rolrdata
MOV rdata9,rdata
andirdata9,0x0f
cpirdata9,0x0a
brshrandm;产生了一个0≤RDATA9≤9的随机数
lslrdata9
lslrdata9
lslrdata9
ret

.cseg
.orgdpfstb;;大小方框字形表
;smallo
.db0b00000000,0b00000000,0b00000000,0b00011000
.db0b00011000,0b00000000,0b00000000,0b00000000
.db0b00000000,0b00000000,0b00111100,0b00100100
.db0b00100100,0b00111100,0b00000000,0b00000000
.db0b00000000,0b01111110,0b01000010,0b01000010
.db0b01000010,0b01000010,0b01111110,0b00000000
;bigo
.db0b11111111,0b10000001,0b10000001,0b10000001
.db0b10000001,0b10000001,0b10000001,0b11111111
.db0b00000000,0b01111110,0b01000010,0b01000010
.db0b01000010,0b01000010,0b01111110,0b00000000
.db0b00000000,0b00000000,0b00111100,0b00100100
.db0b00100100,0b00111100,0b00000000,0b00000000
.cseg
.orgrandtb;随机数种子表
.db0x5a,0x7b,0x5b,0x4f,0x66,0x6d,0x7d,0x07
.db0x3b,0x8c,0x67,0x9a,0x99,0x7e,0x2d,0x3e
.db0x5c,0x6d,0x5b,0x7e,0xf6,0xe7,0x4c,0xc8
.db0x69,0x9c,0xe2,0x75,0x6c,0xd3,0xe8,0x9a
.cseg
.orgnumbertb;0-9数字字形表
;0
.db0b00111000,0b01000100,0b01000100,0b01000100
.db0b01000100,0b01000100,0b01000100,0b00111000
;1
.db0b00010000,0b00011000,0b00010000,0b00010000
.db0b00010000,0b00010000,0b00010000,0b00111000
;2
.db0b00011100,0b00100010,0b00100000,0b00010000
.db0b00001000,0b00000100,0b00000010,0b00111110
;3
.db0b00111100,0b00010000,0b00001000,0b00010000
.db0b00100000,0b00100000,0b00100010,0b00011100
;4
.db0b00100000,0b00110000,0b00101000,0b00100100
.db0b00100010,0b11111110,0b00100000,0b00100000
;5
.db0b01111110,0b00000010,0b00111110,0b01000000
.db0b01000000,0b01000000,0b01000010,0b00111100
;6
.db0b00110000,0b00001000,0b00000100,0b00111100
.db0b01000100,0b01000100,0b01000100,0b00111000
;7
.db0b01111100,0b01000000,0b00100000,0b00010000
.db0b00001000,0b00001000,0b00001000,0b00001000
;8
.db0b00111000,0b01000100,0b01000100,0b00111000
.db0b01000100,0b01000100,0b01000100,0b00111000
;9
.db0b00111000,0b01000100,0b01000100,0b01111000
.db0b01000000,0b01000000,0b01000100,0b00111000

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭