单片机操作例程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
按键显示
一、控制要求
8个按钮(SB0~SB7),一个数码管显示。
无按钮按下时显示字母“P”,有按钮按下时显示对应键值(0~7)
二、参考电路
三参考程序
ORG 0000H
LP: JB P2.0,SB1
MOV P1,#3FH ;送0 JNB P2.0,$
SB1: JB P2.1,SB2
MOV P1,#06H;送1 JNB P2.1,$
SB2: JB P2.2,SB3
MOV P1,#5BH;送2 JNB P2.2,$
SB3: JB P2.3,SB4
MOV P1,#4FH;送3 JNB P2.3,$
SB4: JB P2.4,SB5
MOV P1,#66H;送4 JNB P2.4,$
SB5: JB P2.5,SB6
MOV P1,#6DH;送5
JNB P2.5,$
SB6: JB P2.6,SB7
MOV P1,#7DH;送6
JNB P2.6,$
SB7: JB P2.7,SBP
MOV P1,#07H;送7
JNB P2.7,$
SBP: MOV P1, #73H;送P
SJMP LP
6个数码管显示移动字符
一、控制要求
六个数码管移动显示一组字符,规定:若向左移动,则一组字符从最右逐个移入,向左移出,全部移出后又从最右移入,如此循环n次。若向右移动则方向相反。要求:具体一组字符内容、移动速度、移动方向、循环次数具由现场设定。
二、参考电路
设数码管有n个(n位),每扫描一个数码管显示的时间段为T1,则扫描一遍需时间为:T2=nT1.根据人眼的视觉残留效应的时间,T2应小于0.04秒,所以nT1<0.04秒,即T1<0.04/n秒。当用6个数码管时,n=6,则可取T1<6ms.若取T1=1 ms即一次点亮一个数码管或在一个数码管上延时的时间是1ms,则6个数码管扫描一遍时间需T2=6 ms此时扫描一帧画面的频率为1/6ms=167赫兹,这个扫描频率是不会感到闪烁的。如果持续循环这样扫描下去,看到的是固定的一幅画面“012345”。
要想使看到的画面从右向左移动设要隔T3时间移动一下,则一幅画面的扫描次数m= T3/ T2.例如,若要每1秒移动一下,则一帧画面的扫描次数
m=1s/6ms=167次。在程序中,设定循环扫描的次数为167次,即可使显示的数字每1秒移动一下,改变循环扫描的次数可改变移动
的速度。由于程序中除延时子程序外还有其它指令要占用时间循环扫描的次数要比167次小
三参考程序:
ORG 0000H
ST: MOV R5,#3
LOOP: MOV R7,#12 ;12组数据(每组6个)
MOV 20H,#0 ;将显示数据的段码距段
码表TAB首地址的偏移
量初值送20H
LP0: MOV R3,#60H ;一组数据循环显示60H
遍,此数据决定移动速度
DL: MOV R0,20H ;每组数据的偏移量首值
送R0
MOV R6,#0FEH ;位码初值(点亮L1)送
R6
LP: MOV P3,#0FFH ; 关显示位码送P3口,否
则会模糊不清
MOV DPTR,#TAB ;段码表首地址送DPTR
MOV A,R0 ;偏移量送A
MOVC A,@A+DPTR;取段码
MOV P1,A ;送字型
MOV P3,R6 ;位码送字位口,显示该数
字
DJNZ R4,$ ;延时
INC R0 ;偏移量加一
MOV A,R6 ;位码
RL A ;左移一位指向下一位
MOV R6,A ;保存位码
JB ACC.6,LP ; 6位未显示完转LP
DJNZ R3,DL ;一组数据显示遍数未完
转DL
INC 20H ;每组偏移量初值加一,
形成下一组偏移量初值DJNZ R7,LP0 ;12组数据未显示完转
LP0
DJNZ R5,LOOP ;循环3次
SJMP $
TAB:DB 00H,00H,00H,00H,00H,3FH,06H,5BH,4FH DB 66H,6DH,00H,00H,00H,00H,00H
END
多台设备循环
一、控制要求
六个LED灯代替6台电动机。两个按钮,一个启动,一个停止。启动键按下后LED灯按照指定顺序与时间循环点亮和熄灭,并循环不止。按下停止,则LED灯全灭,停止后再启动,从头开始运行。要求停止必须使用中断,且堆栈指针必须设置为7BH。
二、 参考电路
三、 参考程序
ORG 0000H LJMP MAIN
ORG 0003H ;外部中断0的矢量地址 AJMP ZT ;有中断产生跳转到ZT 处
MAIN: MOV SP,#7BH ;设置堆栈指针为7BH
MOV IE,#81H ;开中断
MOV DPTR,#TAB ;送数码表首地址
74LS07*6 LED1~LED6
VCC
MOV P1,#0FFH ;开始时使所有灯灭
JB P3.0,$ ;等待启动按键按下
QD: MOV R0,#0 ;设置读取数码表偏移量
为0
LP: MOV A,R0
MOVC A,@A+DPTR;读取数码表里的一个数
CPL A
MOV P1,A ;送P1口进行显示
DY1: MOV R4,#4 ;延时1S程序
(晶振频率为6MHZ)
D0: DJNZ R6,D0
DJNZ R5,D0
DJNZ R4,D0
INC R0
CJNE R0,#21,LP ;判断是否将数据全部显示
完毕
SJMP QD
TAB:DB 01H,02H,02H,04H,04H,04H,08H,08H,08H DB 08H,10H,10H,10H,10H,10H,20H,20H,20H
DB 20H,20H,20H