初学单片机.doc_第1页
初学单片机.doc_第2页
初学单片机.doc_第3页
初学单片机.doc_第4页
初学单片机.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.1功能说明:控制单片机P1端口输出,使P1.0位所接的LED点亮,其他7只灯熄灭。程序:JS01.ASM01: MOV A , #11111110B ; 存入欲显示灯的位置数据02: MOV P1, A ; 点亮第一只灯03: JMP $ ; 保持当前的输出状态04: END ; 程序结束6.2功能说明:单片机P1端口接8只LED,点亮第1、3、4、6、7、8只灯。程序:JS02.ASM01:START: MOV A , #00010010B ; 存入欲显示灯的位置数据02: MOV P1, A ; 点亮灯03: JMP START ; 重新设定显示值04: END ; 程序结束6.3功能说明:单片机P1端口接8只LED,每次点亮一只,向左移动点亮,重复循环。该程序缺少延时环节,适合模拟仿真观察。程序:JS03.ASM01: START: MOV R0, #8 ;设左移8次02: MOV A, #11111110B ;存入开始点亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出04: RL A ;左移一位05: DJNZ R0, LOOP ;判断移动次数06: JMP START ;重新设定显示值07: END ;程序结束6.4功能说明:单片机P1端口接8只LED,每次点亮一只,向右移动点亮,重复循环。程序:JS04.ASM01: START: MOV R0, #8 ;设右移8次02: MOV A, #01111111B ;存入开始点亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出04: ACALL DELAY ;调延时子程序05: RR A ;右移一位06: DJNZ R0, LOOP ;判断移动次数07: JMP START ;重新设定显示值08: DELAY: MOV R5,#50 ;09: DLY1: MOV R6,#100 ;10: DLY2: MOV R7,#100 ;11: DJNZ R7,$ ;12: DJNZ R6,DLY2 ;13: DJNZ R5,DLY1 ;14: RET ;子程序返回15: END ;程序结束6.5功能说明:单片机P1端口接8只LED,每次点亮一只,先把右边的第一只点亮,0.5秒后点亮右数的第二只灯,第一只熄灭,再过0.5秒点亮右数的第三只灯,第二只熄灭,亮灯按此顺序由右向左移动。当亮灯移到左侧后,开始与上述反方向移动,即亮灯由左向右移动,重复循环。程序:JS05.ASM01: START: MOV R0, #8 ;设左移8次02: MOV A,#0FEH ;存入开始亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出 04: ACALL DELAY ;调延时子程序05: RL A ;左移一位06: DJNZ R0, LOOP ;判断移动次数07: MOV R1, #8 ;设右移8次08; LOOP1: RR A ;右移一位09: MOV P1, A ;传送到P1并输出10: ACALL DELAY ;调延时子程序11: DJNZ R1,LOOP1 ;判断移动次数12: JMP START ;重新设定显示值13: DELAY: MOV R5,#25 ;延时0.5秒子程序14: DLY1: MOV R6,#100 ;15: DLY2: MOV R7,#100 ;16: DJNZ R7,$ ;17: DJNZ R6,DLY2 ;18: DJNZ R5,DLY1 ;19: RET ;子程序返回20: END ;6.6功能说明:单片机P1端口接8只LED,每次点亮两只,先从右边向左边移动点亮;再从左边向右边移动点亮,然后闪烁两次,重复循环。程序:JS06.ASM01: START: MOV R0, #7 ;设左移7次02: MOV A,#0FCH ;存入开始亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出04: ACALL DELAY ;调延时子程序05: RL A ;左移一位06: DJNZ R0, LOOP ;判断移动次数07: MOV R1, #7 ;设右移7次08: LOOP1: RR A ;右移一位09: MOV P1, A ;传送到P1并输出10: ACALL DELAY ;调延时子程序11: DJNZ R1, LOOP1 ;判断移动次数12: MOV R2, #3 ;设置闪烁次数13: MOV A, #00H ;设初始值14: LOOP2: MOV P1, A ;P1端口灯亮15: ACALL DELAY ;调用延时子程序16: CPL A ;A取反值17: DJNZ R2, LOOP2 ;判断闪烁次数18: JMP START ;重新设定显示值19: DELAY: MOV R5, #2520: DLY1: MOV R6, #10021: DLY2: MOV R7, #10022: DJNZ R7, $ 23: DJNZ R6, DLY224: DJNZ R5, DLY125: RET ;子程序返回26: END ;程序结束6.6功能说明:单片机P1端口接8只LED,每次点亮两只,先从右边向左边移动点亮;再从左边向右边移动点亮,然后闪烁两次,重复循环。程序:JS06.ASM01: START: MOV R0, #7 ;设左移7次02: MOV A,#0FCH ;存入开始亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出04: ACALL DELAY ;调延时子程序05: RL A ;左移一位06: DJNZ R0, LOOP ;判断移动次数07: MOV R1, #7 ;设右移7次08: LOOP1: RR A ;右移一位09: MOV P1, A ;传送到P1并输出10: ACALL DELAY ;调延时子程序11: DJNZ R1, LOOP1 ;判断移动次数12: MOV R2, #3 ;设置闪烁次数13: MOV A, #00H ;设初始值14: LOOP2: MOV P1, A ;P1端口灯亮15: ACALL DELAY ;调用延时子程序16: CPL A ;A取反值17: DJNZ R2, LOOP2 ;判断闪烁次数18: JMP START ;重新设定显示值19: DELAY: MOV R5, #2520: DLY1: MOV R6, #10021: DLY2: MOV R7, #10022: DJNZ R7, $ 23: DJNZ R6, DLY224: DJNZ R5, DLY125: RET ;子程序返回26: END ;程序结束6.7功能说明单片机端口接八只LED,编程时利用取表的方法,使端口P1做单一灯的变化:先向左移2次,然后向右移2次,再闪烁4次,不断循环。程序:JS07.ASM01: START: MOV DPTR, #TABLE ;存表02: LOOP: CLR A ;A清零03: MOVC A, A+DPTR ;取表代码04: CJNE A, #01H, LOOP1;不是01H,循环05: JMP START ;重新设定06: LOOP1: MOV P1, A ;送P1输出07: ACALL DELAY ;调延时程序08: INC DPTR ;数据指针加109: JMP LOOP ;转移到LOOP处10: DELAY: MOV R5,#25 ;延时0.5秒11: DLY1: MOV R6,#100 ;12: DLY2: MOV R7,#100 ;13: DJNZ R7,$ ;14: DJNZ R6,DLY2 ;15: DJNZ R5,DLY1 ;16: RET ;17: TABLE: DB 0FEH,0FDH,0FBH,0F7H ;18: DB 0EFH,0DFH,0BFH,7FH ; 左移19: DB 0FEH,0FDH,0FBH,0F7H ;20: DB 0EFH,0DFH,0BFH,7FH ; 左移21: DB 7FH,0BFH,0DFH,0EFH ;22: DB 0F7H,0FBH,0FDH,0FEH ; 右移23: DB 7FH,0BFH,0DFH,0EFH ;24: DB 0F7H,0FBH,0FDH,0FEH ; 右移25: DB 00H,0FFH,00H,0FFH ;26: DB 00H,0FFH,00H,0FFH ; 闪烁27: DB 01H ; 结束码28: END ;LED显示7.1功能说明让一位数码管静态显示数字“6”。程序:SMG1.ASM01: START: MOV DPTR, #TABLE ; 存入表的起始地址02: MOV A, #6 ; 将欲显示的数字6存入A03: MOVC A, A+DPTR ; 按地址取代码并存入A04: MOV P0, A ; 将代码送P0转变数字显示05: JMP $ ; 程序运行在当前状态06: TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H; 07: DB 99H, 92H, 82H, 0F8H;08: DB 80H, 90H, 88H, 83H;09: DB 0C6H, 0A1H, 86H, 8EH; 代码表10: END ; 程序结束7.2功能说明用一位数码管循环显示09数字,数字变换间隔的时间为1秒。程序:SMG2.ASM01: START: MOV DPTR, #TABLE ; 存表02: MOV R0, #0 ; 设定初始值03: LOOP : MOV A, R0 04: MOVC A, A+DPTR ; 取表代码05: MOV P0, A ; 送P0输出 06: ACALL DLY1S ; 调延时程序 存表取表07: INC R0 ; R0值加108: CJNE R0, #10 , LOOP ; 不是10,循环09: JMP START ; 重新开始 判断循环10: DLY1S: MOV R5, #50 ;11: D1: MOV R6, #100 ;12: D2: MOV R7, #100 ;13: DJNZ R7, $ ;14: DJNZ R6, D2 ;15: DJNZ R5, D1 ; 1秒延时16: RET ; 子程序17: TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H ;18: DB 99H, 92H, 82H, 0F8H ;19: DB 80H, 90H, 88H, 83H ;20: DB 0C6H, 0A1H, 86H, 8EH ; 代码表21: END ; 程序结束7.3功能说明使用两位数码管显示器,利用扫描方式循环显示0099两位数。程序:SMG3.ASM 01: START: MOV R0, #0 ;初始化计数器02: MOV DPTR, #TABLE ;存入查表启始地址03: LOOP: ACALL DISPLAY ; 调显示子程序04: INC R0 ; 计数器加105: CJNE R0 ,#100, LOOP ; 没到100 循环06: JMP START ; 到开始处 主程序07: DISPLAY::MOV A, R0 ;08: MOV B, #10 ; 16进制换成10进制09: DIV AB ; AB商存A,余数存B10: MOV R1, A ; R1内存放十位数 换11: MOV R2, B ; R2内存放个位数 十进12: MOV R3, #50 ; 设导通频率50次13: LOOP1: MOV A, R2 ; 个位数显示14: ACALL CHANG ; 调显示子程序15: CLR P2.0 ;开个位显示16: ACALL DLY10mS ; 调延时10ms程序 个位17: SETB P2.0 ; 关闭个位显示 显示18: MOV A, R1 ; 取十位数19: ACALL CHANG ; 调取表显示子程序 20: CLR P2.1 ; 开十位显示21: ACALL DLY10mS ; 调延时10ms程序 十位22: SETB P2.1 ; 关闭十位显示 显示23: DJNZ R3, LOOP1 ; 100次没完,继续循环 扫描24: RET ; 子程序25: CHANG: MOVC A, A+DPTR ;26: MOV P0, A ;27: RET ; 取表子程序28: DLY10mS:MOV R6, #20 ;29: D1: MOV R7, #248 ;30: DJNZ R7, $ ;31: DJNZ R6, D1 ; 延时10 m.S 32: RET ; 子程序33: TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H ;34: DB 99H, 92H, 82H, 0F8H ;35: DB 80H, 90H, 88H, 83H ;36: DB 0C6H, 0A1H, 86H, 8EH ; 代码表37: END ; 程序结束键盘控制8.1功能说明:用八位指拨开关(DIP)作单片机的输入,控制输出端口连接的八只LED发光二极管。如若DIP1开关为 ON(向右拨动)则LED1亮,其它开关作用相同。 程序:SR01.ASM01: LOOP: MOV A, P3 ; 从P3读入DIP开关值02: MOV P1, A ; 从P1输出03: JMP LOOP ; 无穷循环04: END ; 程序结束8.2功能说明:用DIP开关中的低4位作二进制的输入,控制输出端数码管显示器的输出。程序:SR02.ASM01: MOV DPTR,#TABLE ; 存表02: MOV P0, #0FFH ; LED全灭03: LOOP: MOV A, P3 ; 从P3口读入DIP开关值04: ANL A, #0FH ; 高4位清0,取低四位05: ACALL CHANG ; 转成七段显示码06: MOV P0, A ; 从P0输出07: JMP LOOP ; 转移LOOP处,循环08: CHANG: MOVC A,A+DPTR ; 取码09: RET ; 返回 转换显示码子程序10: TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H ;11: DB 99H, 92H, 82H, 0F8H ;12: DB 80H, 90H, 88H, 83H ;13: DB 0C6H, 0A1H, 86H, 8EH ; 显示码表14: END ; 程序结束8.3功能说明:用两个按键开关K1和K2作输入,K1为电源指示灯开关,K2为工作指示灯开关。分别控制电源指示灯(P1.0接的LED)和工作指示灯(P1.7接的LED)的接通和关闭。接通电源时,电源指示灯是在亮的状态。当按K2时,工作指示灯亮,电源指示灯灭。按K1时,电源指示灯亮,工作指示灯灭。程序:SR03.ASM01: START: MOV P1, #11111110B ; P1.0所接LED亮02: JB P2.5 , $ ; 判断P2.5(K2键)是否为103: ON: MOV P1, #01111111B ; P1.7所接LED亮04: JNB P2.4, START ; 判断P2.4(K1键)是是否为005: JMP ON ; 未按K1键,则跳至ON06: END ; 程序结束8.4功能说明:由四个按键开关组成独立式键盘,控制灯左移、右移和闪烁。程序:JP01.ASM01: START: MOV P1,#0FFH ;设置输出口初值02: MOV A,#0FFH ;设置输入方式03: MOV P2,A ;04: LOOP: MOV A,P2 ;读入键盘状态05: CJNE A,#0FFH,LP0 ;有键按下否06: JMP LOOP ;无键按下等待07: LP0: ACALL DELAY1 ;调延时去抖动08: MOV A,P2 ;重读入键盘状态09: CJNE A,#0FFH,LP1 ;非误读则转10: JMP LOOP ; 按键查询11: LP1: JNB P2.4, A1 ;K1键按下转A112: JNB P2.5, A2 ;K2键按下转A213: JNB P2.6, A4 ;K3键按下转A314: JNB P2.7, A4 ;K4键按下转A4 键按下后转15: JMP START ;无键按下返回 功能处理程序16: A1: MOV R0, #8 ;设置左移位数17: MOV A ,#0FEH ;设置左移初值18: LOOP2: MOV P1, A ;输出至P119: ACALL DELAY ;调延时1秒子程序20: RL A ;左移一位21: DJNZ R0, LOOP2 ;判断移动位数 1号功能键22: JMP START ;返回主程序开始处 处理程序23: A2: MOV R0,#8 ;设置右移位数24: MOV A ,#0FCH ;设置右移初值25: LOOP3: RR A ;右移一位26: MOV P1, A ;输出至P127: ACALL DELAY ;调延时1秒子程序28: DJNZ R0, LOOP3 ;判断移动位数 2号功能键29: JMP START ;返回主程序开始处 处理程序30: A3: MOV R0,#6 ;设置闪烁次数31: MOV A ,#0F0H ;设置初值32: LOOP4: MOV P1, A ;输出至P133: ACALL DELAY ;调延时1秒子程序34: CPL A ;反相35: MOV P1,A ;输出36: DJNZ R0, LOOP4 ;判断移动位数 3号功能键37: JMP START ;返回主程序开始处 处理程序38: A4: MOV R0,#10 ;设置闪烁次数39: MOV A, #00H ;设置初值40: LOOP5: MOV P1,A ;输出41: ACALL DELAY ;调延时子程序42: CPL A ;反相43: MOV P1,A ;输出44: DJNZ R0, LOOP5 ;判断闪烁次数 4号功能键45: MP START ;返回主程序开始处 处理程序46: DELAY1: MOV R3, #60 ;消抖延时子程序47: D2: MOV R4, #248 ; 48: DJNZ R4, $ ;49: DJNZ R3, D2 ; 消除抖动50: RET ; 延时子程序51: DELAY: MOV R5, #50 ;延时1秒子程序52: DLY1: MOV R6, #100 ;53: DLY2: MOV R7, #100 ;54: DJNZ R7, $ ;55: DJNZ R6, DLY2 ;56: DJNZ R5, DLY1 ;57: RET ; 延时子程序58: END ; 程序结束8.5功能说明:使用44矩阵式键盘,共有16个按键,通过扫描方法控制显示器输出0F十六进制数。程序:JP02.ASM01: ORG 00H ;02: START: MOV R4,#00H ;03: L1: MOV R3,#0F7H ;扫描初值(P3.3=0)04: MOV R1,#00H ;取码指针 设置初值05: L2: MOV A,R3 ;开始扫描06: MOV P3,A ;将扫描值输出至P307: MOV A,P3 ;读入P3值,判断有无按下 送出行扫描初08: MOV R4,A ;存入R4,以判断是否放开 值(P3.3=0)09: SETB C ;C=110: MOV R5,#04H ;扫描P3.4P3.711: L3: RLC A ;将按键值左移一位12: JNC KEY ; 有键按下C=0,跳至KEY13: INC R1 ;C=1没键按下,指针值加114: DJNZ R5,L3 ;4列扫描完毕了? 左移检测列15: MOV A,R3 ;扫描值载入16: SETB C ;C=117: RRC A ;扫描下一行18: MOV R3,A ;存回扫描寄存器19: JC L2 ;C=1,程序转到L2处20: JMP L1 ;C=0则4行已扫描完毕 右移扫描行21: KEY: ACALL DELAY ;调延时子程序 消除抖动22: D1: MOV A,P3 ;读入P3值23: XRL A,R4 ;与上次读入值作比较24: JZ D1 ;A=0,表示按键未放25: MOV A,R1 ;按键已放开,指针载入A 按键释放从26: ACALL DISP ;调用显示子程序 TABLE取码27: JMP L1 ; 重复扫描28: DISP: MOV DPTR,#TABLE ;数据指针指到TABLE29: MOVC A,A+ DPTR ;至TABLE取码30: MOV P0,A ; 输出31: RET ; 子程序返回 显示子程序32: DELAY: MOV R7, #60 ; 33: MOV R6, #248 ;34: DLY1: DJNZ R6, $ ;35: DJNZ R7, DLY1 ; 消除抖动36: RET ; 延时子程序37: TABLE: DB 0C0H, 0F9H, 0A4H,0B0H ;39: DB 99H, 92H, 82H, 0F8H ;40: DB 80H, 90H, 88H, 83H ;41: DB 0C6H, 0A1H, 86H, 8EH ; 编码表42: END ; 程序结束 中断9.1功能说明:单片机P1端口的8个LED作左移右移,不断循环。当按外部中断INT0开关K1时,循环停止,转而使8个LED闪烁4次。之后,又恢复灯的左右移循环。程序:ZD01.ASM01: ORG 00H ; 起始地址02: JMP START ;跳到主程序START03: ORG 03H ;INT0中断起始地址 规定起04: JMP EXT0 ;跳到中断子程序 始地址05: START:MOV IE, #10000001B ;INT0中断开通06: MOV IP, #00000001B ;INT0中断优先07: MOV TCON, #00000000B ;INT0为电平触发08: MOV SP, #70H ;设定堆栈指针 中断设定09: LOOP:MOV R0, #8 ; 设置左移位数10: MOV A , #0FEH ; 设置左移初值11: LOOP1:MOV P1, A ; 输出至P112: ACALL DELAY ; 调延时子程序13: RL A ; 左移一位14: DJNZ R0, LOOP1 ; 判断移动位数 左移15: MOV R0, #8 ; 设置右移位数16: LOOP2:RR A ; 右移一位17: MOV P1, A ; 输出至P118: LCALL DELAY ; 调延时子程序19: DJNZ R0, LOOP2 ; 判断移

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论