这是2008年stc程序个人设计汇总

源代码在线查看: 02综合多功能测试程序2.asm

软件大小: 511 K
上传用户: newyearday
关键词: 2008 stc 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				;本程序是一个综合测试程序,其任务是:
				;1是要让8个数管能分别显示不同的数字,
				;2是要让点阵显示不同的字符或者图形并流动,
				;3是要让4*4的矩阵键盘的键码显示在数个管上,
				;4是能测试DS1302,能让数码管显示的时间
				;5能让蜂鸣器发声让继电器发出相应的声音,
				;6能让红外线遥控器使程序运行显示单位数码管
				;7停电后用串行存储器保存数码管的数据
				;说明:本板经过本测试程序后,就可以确定串行扩展\数码管\LED点阵\蜂鸣器\继电器\红外接收头\时钟\串行存储\键盘等等都是好的.
				;本程序是一个综合测试程序,由于大量IO口功能复用,以上功能会互相影响,这是正常现象,并非板子有故障
				;本程序虽然是一个测试程序,但是由于功能多,导致程序非常复杂,需要大家自己学习理解,本站不负责技术咨询服务
				;本程序已涵盖单片机产品开发中的大多数应用,修改和引用本程序请注明出自五一电子网站,并写明网址http://www.51dz.com
				;五一电子对支付了学费的用户,可以提供技术咨询和指导服务,51电子网站联系电话:0755-27947428
				;注:本程序由于占用了串口通信口,因此不能用STT89E516RD仿真芯片仿真,这是正常现象!其它程序也一样,用了串口就不能仿真,更多关于仿真的文章请访问http://www.51dz.com.
				
				
				org 00h
				mov dptr,#ledtab
				mov r1,#0
				mov r5,#0
				
				mov 30h,#0
				mov 31h,#1
				mov 32h,#2
				mov 33h,#3
				mov 34h,#4
				mov 35h,#5
				mov 36h,#6
				mov 37h,#7   ;先将要显示的数放入寄存器内,以后做产品时,你要显示什么数就由你的程序自动计算自动放进这里
				
				
				main:
				
				;LED动态扫描程序显示开始,说明有8只LED数码管,就需要分别显示8只数码管,r7表示是轮到显示第几只
				
				inc r7
				disp0:cjne r7,#8,disp1
				mov r7,#0
				disp1:cjne r7,#0,disp2
					mov 38h,#10000000b    ;将要显的那只数码管的共阳极数据,通过串行口向74HC164发送数据,只让一个数码管的阳极有电,即只点亮一只数码管
					mov 39h,30h  		;将要显示的数码管的笔画数据
					call ddpp               ;调用显示子程序,对上面的数码管数据显示    
				disp2:cjne r7,#1,disp3
					mov 38h,#01000000b    ;将要显的那只数码管的共阳极数据,通过串行口向74HC164发送数据,只让一个数码管的阳极有电,即只点亮一只数码管
					mov 39h,31h  		;将要显示的数码管的笔画数据
					call ddpp               ;调用显示子程序,对上面的数码管数据显示    
				disp3:cjne r7,#2,disp4
					mov 38h,#00100000b    ;将要显的那只数码管的共阳极数据,通过串行口向74HC164发送数据,只让一个数码管的阳极有电,即只点亮一只数码管
					mov 39h,32h  		;将要显示的数码管的笔画数据
					call ddpp               ;调用显示子程序,对上面的数码管数据显示    
				disp4:cjne r7,#3,disp5
					mov 38h,#00010000b    ;将要显的那只数码管的共阳极数据,通过串行口向74HC164发送数据,只让一个数码管的阳极有电,即只点亮一只数码管
					mov 39h,33h  		;将要显示的数码管的笔画数据
					call ddpp               ;调用显示子程序,对上面的数码管数据显示    
				disp5:cjne r7,#4,disp6
					mov 38h,#00001000b    ;将要显的那只数码管的共阳极数据,通过串行口向74HC164发送数据,只让一个数码管的阳极有电,即只点亮一只数码管
					mov 39h,34h  		;将要显示的数码管的笔画数据
					call ddpp               ;调用显示子程序,对上面的数码管数据显示    
				disp6:cjne r7,#5,disp7
					mov 38h,#00000100b    ;将要显的那只数码管的共阳极数据,通过串行口向74HC164发送数据,只让一个数码管的阳极有电,即只点亮一只数码管
					mov 39h,35h  		;将要显示的数码管的笔画数据
					call ddpp               ;调用显示子程序,对上面的数码管数据显示    
				disp7:cjne r7,#6,disp8
					mov 38h,#00000010b    ;将要显的那只数码管的共阳极数据,通过串行口向74HC164发送数据,只让一个数码管的阳极有电,即只点亮一只数码管
					mov 39h,36h  		;将要显示的数码管的笔画数据
					call ddpp               ;调用显示子程序,对上面的数码管数据显示    
				disp8:cjne r7,#7,disp9
					mov 38h,#00000001b    ;将要显的那只数码管的共阳极数据,通过串行口向74HC164发送数据,只让一个数码管的阳极有电,即只点亮一只数码管
					mov 39h,37h  		;将要显示的数码管的笔画数据
					call ddpp               ;调用显示子程序,对上面的数码管数据显示    
				disp9:
				
				
				djnz r4,$
				djnz r4,$
				djnz r4,$
				djnz r4,$
				djnz r4,$
				djnz r4,$
				djnz r4,$
				djnz r4,$
				djnz r4,$
				djnz r4,$
				djnz r4,$
				
				
				djnz r6,mend
				mov r6,#20
				inc r5
				cjne r5,#8,mend
				mov r5,#0
				
				mend:jmp main 
				
				
				
				ddpp:	mov a,38h    ;通过串行口向74HC164发送数据,只让一个数码管的阳极有电,即只点亮一只数码管
					mov p1,#0ffh    ;向74HC164送数据前要先熄灭LED数码管显示,否则,会出"鬼影",因为要确保每一位管对应每一位管的数据
					mov sbuf,a
					nop
					nop
					nop
					nop
					mov a,39h  		;累加器读入要显示的第一个数
				
				mov dptr,#ledtab
				movc a,@a+dptr  ;这是唯一的查表指令,作用就是读出DPTR中的表名中的第几个数的数据.
					cpl a ;可以显示阴文或者阳文,ledtab是顺序存放的0123456789abcdef的LED笔画关系,根据数码管的共阴或者共阳,有时高电平是点亮,有时低电平是点亮.
					mov p1,a ;放到P1口,显示出字符
				
				
					mov p2,#000h  
					mov a,r5  		;累加器读入要显示的第一个数
				add a,r7
				cjne a,#8,$+3
				jc $+4
				subb a,#8
				
				nop
				nop
				
				;mov dptr,#tab1
				;mov dptr,#tab2
				;mov dptr,#tab3
				mov dptr,#tab4
				;mov dptr,#tab5
				;mov dptr,#tab6
				
				movc a,@a+dptr  ;这是唯一的查表指令,作用就是读出DPTR中的表名中的第几个数的数据.
					cpl a ;可以显示阴文或者阳文,ledtab是顺序存放的0123456789abcdef的LED笔画关系,根据数码管的共阴或者共阳,有时高电平是点亮,有时低电平是点亮.
					mov p2,a ;放到P1口,显示出字符
				
				
					ret
				
				
				ledtab: db 11101101b,00000101b,11100011b,01100111b,00001111b,01101110b,11101110b,00100101b,11101111b,01101111b,10101111b,11001110b,11101000b,11000111b,11101010b,10101010b
				
				
				tab1:;四边形加中心四点
				db 00011000b
				db 00100100b
				db 01000010b
				db 10011001b
				db 10011001b
				db 01000010b
				db 00100100b
				db 00011000b
				tab2:;叉叉
				db 10000001b
				db 01000010b
				db 00100100b
				db 00011000b
				db 00011000b
				db 00100100b
				db 01000010b
				db 10000001b
				tab3:;箭头1
				db 00011000b
				db 00111100b
				db 01011010b
				db 10011001b
				db 00011000b
				db 00011000b
				db 00011000b
				db 00011000b
				tab4:;箭头2
				db 00010000b
				db 00111000b
				db 01010100b
				db 10010010b
				db 00010000b
				db 00010000b
				db 00010000b
				db 00000000b
				tab5:;四边形加中心四点
				db 00011000b
				db 00100100b
				db 01000010b
				db 10011001b
				db 10011001b
				db 01000010b
				db 00100100b
				db 00011000b
				tab6:;四边形加中心四点
				db 00011000b
				db 00100100b
				db 01000010b
				db 10011001b
				db 10011001b
				db 01000010b
				db 00100100b
				db 00011000b
				
				
				
				
				
				
				end
				
				
				;最后告诉大家:这个程序功能是非常正确的,这个程序比起上一个程序来说,短多了,又好读又好理解,又好维护
				
							

相关资源