A. C51单片机“冒泡法”排序实例
用keil调试下,就可以知道结果了。
感觉楼主的分析是正确的……
只是不清楚这个程序段的意图是对数组a[]的全部数据进行排序还是仅对其前9个数据排序。
printf("the unsorted numbers:\n");
for(i=0;i<9;i++)
printf("%bx",a[i]);
printf("\n");
printf("the sorted number:\n");
for(i=0;i<=10;i++)
printf("%bx",a[i]);
按常理,这两段应该是对应的,判断条件下面的那个更合理,按分析前面那段只打印未排序前的a[0]~a[8];后面那段却将11个数全部打印出来了。 (实际还应以调试结果为准)
B. 一个单片机程序流程图讲解
程序思路是:
如果key1按下那么scale加1
如果scale=1,当key2按下时最大值加;当key3按下时最大值减。
如果scale=2,当key2按下时最小值加;当key3按下时最小值减。
如果scale=3,那么复位scale=0,程序结束。
如果key1未按且key2按下和key3同时按下,那么
z1加1(有些看不清),如果key2释放,这继续加,否则结束。
如果所有键都未按,这结束。
C. 单片机程序设计流程图
LED_BIT_1 EQU 30H ; 存放8位数码管的段码
LED_BIT_2 EQU 31H
LED_BIT_3 EQU 32H
LED_BIT_4 EQU 33H
LED_BIT_5 EQU 34H
LED_BIT_6 EQU 35H
LED_BIT_7 EQU 36H
LED_BIT_8 EQU 37H ; 存放初始密码
SECOND EQU 60H
MINUTE EQU 61H
HOUR EQU 62H
TCNT EQU 63H
ORG 00H ;初始化程序 ,设置初始密码
SJMP START
ORG 0BH
LJMP INT_T0
START:
MOV DPTR,#TABLE
MOV HOUR,#0
MOV MINUTE,#0
MOV TCNT,#0
MOV TMOD,#01H
MOV TH0,#03ch ;定时50毫秒
MOV TL0,#03ch
MOV IE,#082H
SETB TR0
MOV LED_BIT_1,#00H ;段码存储区清0
MOV LED_BIT_2,#00H
MOV LED_BIT_3,#00H
MOV LED_BIT_4,#00H
MOV LED_BIT_5,#00H
MOV LED_BIT_6,#00H
MOV LED_BIT_7,#79H
MOV LED_BIT_8,#73H
MOV TMOD,#01H
MOV TH0,#0fdh
MOV TL0,#0fdh
MOV IE,#82H
A1:
LCALL DISPLAY ;调用时间显示
JNB P1.0,S1
JNB P1.1,S2
JNB P1.2,S3
JNB P1.3,S4
LJMP A1
S1: LCALL DLY_S ;去抖动
JB P1.0,A1
INC HOUR ;秒值加1
MOV A, HOUR
CJNE A,#24,J00 ;判断是否加到60秒
MOV HOUR,#0
LJMP A1
S2: LCALL DLY_S
JB P1.1,A1
K01: DEC HOUR ;SHI-
MOV A,HOUR
CJNE A,#0,J01 ;判断是否-0分
MOV HOUR,#24
LJMP A1
S3: LCALL DLY_S
JB P1.2,A1
K02: INC MINUTE ;小时值加1
MOV A,MINUTE
CJNE A,#60,J02 ;判断是否加到24小时
MOV MINUTE,#0
LJMP A1
S4: LCALL DLY_S
JB P1.3,A1
K03: DEC MINUTE ;小时值加1
MOV A,MINUTE
CJNE A,#0,J03 ;判断是否加到24小时
MOV MINUTE,#59
LJMP A1
J00: JB P1.0,A1 ;等待按键抬起
LCALL DISPLAY
SJMP J00
J01: JB P1.1,A1
LCALL DISPLAY
SJMP J01
J02: JB P1.2,A1
LCALL DISPLAY
SJMP J02
J03: JB P1.3,A1
LCALL DISPLAY
SJMP J03
INT_T0: MOV TH0,#3ch ;定时器中断服务程序
MOV TL0,#3ch ;对秒,分钟和小时的计数
INC TCNT
MOV A,TCNT
CJNE A,#20,RETUNE ;计时1秒
INC SECOND
MOV TCNT,#0
MOV A,SECOND
CJNE A,#60,RETUNE
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETUNE
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETUNE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE: RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DIS3闹铃设置子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DIS3
DISPLAY: ;显示时间控制子程序
MOV A,SECOND ;显示秒
MOV B,#10
DIV AB
CLR P2.6
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.6
MOV A,B
CLR P2.7
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.7
CLR P2.5
MOV P0,#40H ;显示分隔符
LCALL DLY_S
SETB P2.5
MOV A,MINUTE ;显示分钟
MOV B,#10
DIV AB
CLR P2.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.3
MOV A,B
CLR P2.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.4
CLR P2.2
MOV P0,#40H ;显示分隔符
LCALL DLY_S
SETB P2.2
MOV A,HOUR ;显示小时
MOV B,#10
DIV AB
CLR P2.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.0
MOV A,B
CLR P2.1
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;延时
DLY_S: MOV R6,#5 ;延时程序
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
RET
DLY_L: MOV R5,#50
D2: MOV R6,#100
D3: MOV R7,#100
DJNZ R7,$
DJNZ R6,D3
DJNZ R5,D2
RET
END
请采纳答案,支持我一下。
D. 单片机程序流程图,速求。只要流程图,不要太复杂,简单点最好。
1开机初始化
2串口中断接收
3当串口接收到 + 号 P1最低位 输出高 延时加5US --关P1最低位
4当串口接收到 - 号 P1最低位 输出高 延时减5US --关P1最低位
5重复3,4步骤
此处不能画图,只能这样描述
E. 使用单片机汇编语言冒泡法排序
一、实验要求
给出一组随机数,将此组数据排序,使之成为有序数列
二、实验目的
1.了解数据排序的简单算法。
2.了解数列的有序和无序概念
三、实验说明
有序的数列更有利于查找。本程序用的是“冒泡排序”法,算法是将一个数与后面的
数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在
数列的最后面。再进行下一轮比较,找出第二大数据,直到全部数据有序。
四、程序框图
Size equ 10 ; 数据个数
Array equ 50h ; 数据起始地址
Change equ 0 ; 交换标志
Sort:
mov r0, #Array
mov r7, #Size-1
clr Change
Goon:
mov a, @r0
mov r2, a
inc r0
mov B, @r0
cjne a, B, NotEqual
sjmp Next
NotEqual:
jc Next ; 前小后大, 不交换
setb Change ; 前大后小, 置交换标志
xch a, @r0 ; 交换
dec r0
xch a, @r0
inc r0
Next:
djnz r7, Goon
jb Change, Sort
ljmp $
end
引自:伟福单片机开发平台软件实验
F. 关于单片机的程序流程图问题。。
这个很好理解的,程序肯定是用定时器来做了一个延时,也就是定时清除数据延时,当延时时间到后,延时标志应该是0,当检测到这个0时,程序会清楚数据,同时将延时标志置位。显然这个流程图中漏掉了这个清楚数据环节。
G. 单片机流程图
在word里画的,不太漂亮,凑合看下,这个程序就是开机后,1s蜂鸣器叫一下,等到30s时(包括之后的时间都是)蜂鸣器一直响~~给你画个图用了半个小时时间~~
H. 单片机流程图怎么画,题目如下
程序思路是:
如果key1按下那么scale加1
如果scale=1,当key2按下时最大值加;当key3按下时最大值减。
如果scale=2,当key2按下时最小值加;当key3按下时最小值减。
如果scale=3,那么复位scale=0,程序结束。
如果key1未按且key2按下和key3同时按下,那么
z1加1(有些看不清),如果key2释放,这继续加,否则结束。
如果所有键都未按,这结束。
I. 单片机程序及流程图(具体可以看图)
这些程序注释多么详细,你还需要怎么直白呢?还是自己稍微静心一会,仔细看看程序吧。别人再也无法给你更详细的注解了。至于流程图,你可以以主程序为主来绘制主程序流程图,也可以对关键子程序绘制功能模块的流程图。