单片机操作例程
- 格式:doc
- 大小:1.49 MB
- 文档页数:33
按键显示一、控制要求8个按钮(SB0~SB7),一个数码管显示。
无按钮按下时显示字母“P”,有按钮按下时显示对应键值(0~7)二、参考电路三参考程序ORG 0000HLP: JB P2.0,SB1MOV P1,#3FH ;送0 JNB P2.0,$SB1: JB P2.1,SB2MOV P1,#06H;送1 JNB P2.1,$SB2: JB P2.2,SB3MOV P1,#5BH;送2 JNB P2.2,$SB3: JB P2.3,SB4MOV P1,#4FH;送3 JNB P2.3,$SB4: JB P2.4,SB5MOV P1,#66H;送4 JNB P2.4,$SB5: JB P2.5,SB6MOV P1,#6DH;送5JNB P2.5,$SB6: JB P2.6,SB7MOV P1,#7DH;送6JNB P2.6,$SB7: JB P2.7,SBPMOV P1,#07H;送7JNB P2.7,$SBP: MOV P1, #73H;送PSJMP LP6个数码管显示移动字符一、控制要求六个数码管移动显示一组字符,规定:若向左移动,则一组字符从最右逐个移入,向左移出,全部移出后又从最右移入,如此循环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 0000HST: MOV R5,#3LOOP: MOV R7,#12 ;12组数据(每组6个)MOV 20H,#0 ;将显示数据的段码距段码表TAB首地址的偏移量初值送20HLP0: MOV R3,#60H ;一组数据循环显示60H遍,此数据决定移动速度DL: MOV R0,20H ;每组数据的偏移量首值送R0MOV R6,#0FEH ;位码初值(点亮L1)送R6LP: MOV P3,#0FFH ; 关显示位码送P3口,否则会模糊不清MOV DPTR,#TAB ;段码表首地址送DPTRMOV A,R0 ;偏移量送AMOVC 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位未显示完转LPDJNZ R3,DL ;一组数据显示遍数未完转DLINC 20H ;每组偏移量初值加一,形成下一组偏移量初值DJNZ R7,LP0 ;12组数据未显示完转LP0DJNZ R5,LOOP ;循环3次SJMP $TAB:DB 00H,00H,00H,00H,00H,3FH,06H,5BH,4FH DB 66H,6DH,00H,00H,00H,00H,00HEND多台设备循环一、控制要求六个LED灯代替6台电动机。
两个按钮,一个启动,一个停止。
启动键按下后LED灯按照指定顺序与时间循环点亮和熄灭,并循环不止。
按下停止,则LED灯全灭,停止后再启动,从头开始运行。
要求停止必须使用中断,且堆栈指针必须设置为7BH。
二、 参考电路三、 参考程序ORG 0000H LJMP MAINORG 0003H ;外部中断0的矢量地址 AJMP ZT ;有中断产生跳转到ZT 处MAIN: MOV SP,#7BH ;设置堆栈指针为7BHMOV IE,#81H ;开中断MOV DPTR,#TAB ;送数码表首地址74LS07*6 LED1~LED6VCCMOV P1,#0FFH ;开始时使所有灯灭JB P3.0,$ ;等待启动按键按下QD: MOV R0,#0 ;设置读取数码表偏移量为0LP: MOV A,R0MOVC A,@A+DPTR;读取数码表里的一个数CPL AMOV P1,A ;送P1口进行显示DY1: MOV R4,#4 ;延时1S程序(晶振频率为6MHZ)D0: DJNZ R6,D0DJNZ R5,D0DJNZ R4,D0INC R0CJNE R0,#21,LP ;判断是否将数据全部显示完毕SJMP QDTAB:DB 01H,02H,02H,04H,04H,04H,08H,08H,08H DB 08H,10H,10H,10H,10H,10H,20H,20H,20HDB 20H,20H,20HZT: MOV P1,#0FFHJB P3.0,$POP 40H ;先弹出高8位地址POP 41H ;再弹出低8位地址MOV 30H,#05H;开始处低8位地址MOV 31H,#00H;开始处高8位地址PUSH 30H;先压低8位地址PUSH 31H;再压高8位地址RETIEND打印机接口电路一、控制要求利用8051控制TpuP-AT微型打印机,打印两行文字:第一行:U=380.5V,I=58.6mA第二行:XXXX年XX月XX日二、参考电路原理图注:/STB上升沿将DB0~DB7的数据锁存至打印机内;打印机繁忙时BUSY输出为高电平,否则输出低电平;打印机接收到回车符时开始打印(回车符的ASCII码是0DH,换行符是0AH,年为8CH,月为8DH日为8EH)ORG 0000HSTART: MOV R0,#0 ;设置读取表格偏移量为0MOV DPTR,#TAB;表格首地址送DPTR LP: MOV A,R0MOVC A,@A+DPTR ;读取表格里的一个数据MOV P1,A ;将数据送打印机数据口 CLR P3.1 ;JB P3.2,$ ;繁忙时等待SETB P3.1 ;当STB上升沿时数据口的数据被锁存INC R0 ;指向数据表格里的下一个数据CJNE A,#0DH,LP;判断传送是否完毕SJMP $TAB:DB …U=380.5V,I=58.6A‟,0AHDB …2008年03月16日‟,0DHEND生产线工件自动计数器一、控制要求两个数码管对红外对管输入计数值进行显示,两个按钮,一个启动,一个暂停。
启动后从0开始对红外对管输入的计数值进行计数显示,计数到目标值(0<目标值<=99)后LED发光报警并停止计数但显示保持,报警后按下启动按钮又从0开始计数显示。
在计数显示过程中,暂停按钮若按下,则停止计数显示,暂停后再启动则接着暂停前的状态继续运行。
三.参考程序:ORG 0000HMAIN: MOV DPTR,#TAB ;段码表首地址送DPTR MOV TMOD,#05H; T0工作在方式1MOV TL0,#0 ;将计数器清零JB P3.3,$ ;等待启动按扭按下LP0: SETB TR0 ;启动计数器T0ACALL DP ;调用显示子程序,不断扫描显示当前的计数值JB P3.2,LP2;没按暂停就转LP2CLR P3.5 ;按下暂停使LED灯亮CLR TR0 ;暂停后停止计数LP1: ACALL DP;调用显示子程序JB P3.3,LP1;等待暂停后的启动LP2: SETB P3.5;暂停后再启动将LED灯灭CJNE R0,#18,LP0;判断计数是否达到目标数,没达到则转LP0CLR P3.5 ; 如果达到则使LED灯亮CLR TR0 ;停止计数LP3: ACALL DP;调用显示子程序JB P3.3,LP3 ;等待再次启动SJMP MAIN;再次启动后从0开始计数TAB:DB 3FH,06H,5BH,4FH,66H,6DHDB 7DH,07H,7FH,6FH;0—9共阴段码DP: MOV A,TL0 ;取计数值MOV R0,A ;送R0MOV B,#10;DIV AB;用除法指令将A中数分成个位,十位MOVC A,@A+DPTR ;取显示十位段码MOV P1,A ;送P1进行显示CLR P3.0 ;使十位显示有效SETB P3.0 ;使十位显示无效MOV A,BMOVC A,@A+DPTR ;取显示个位段码MOV P1,A ;送P1进行显示CLR P3.1 ;使个位显示有效SETB P3.1 ;使个位显示无效RETEND电梯轿厢指层器一、控制要求两个数码管显示电梯楼层,十位数码管的小数点作为上升指示,个位数码管的小数点作为下降指示。
电梯上升或下降过程中,显示前方楼层,对应上升或下降指示亮。
平层后显示当前楼层,上升或下降指示不亮。
运行时间以及平层时间按照考评要求定。
楼层数亦按照考评要求定。
以16层显示为例:01→0.2→02→0.3→03→0.4→04→0.5→05→0.6→——→0.9→09→1.0→10→1.1→------→15→1.6→16→15. →15→14. →14→13. →13→12. →12→-----02.→02→01. →ORG 0000HSTART: MOV R0,#0 ;设置偏移量为0MOV DPTR,#TAB;数码表首地址送DPTR LP: MOV A,R0;取偏移量MOVC A,@A+DPTR;取数码管数据MOV R1,A;送十位段码INC R0MOV A,R0MOVC A,@A+DPTR;读取下一个数据MOV R2,A;送个位段码D1: MOV R4,#2;显示程序段,显示程序约为3秒D2: MOV P1,R1;十位数段码送P1口CLR P3.0;显示十位SETB P3.0;关十位MOV P1,R2;个位数段码送P1口CLR P3.1;显示个位SETB P3.1;关个位DJNZ R6,D2;0减1为FF,256次DJNZ R5,D2DJNZ R4,D2INC R0CJNE R0,#16,LPSJMP START;循环TAB:DB 3FH,06H,0BFH,5BH,3FH,5BH,0BFH DB 4FH,3FH,4FH,3FH,0DBH,3FH,5BH DB 3FH,86HEND步进电机自动控制一、控制要求利用AT89C51控制4相三四拍(步)6线步进电机(型号:25BY48B03,30欧姆,步距角度为7.5度)工作,两个按钮控制,一个启动,另外一个暂停。