【51单片机】考试例程|汇编实现
2021/5/15 14:26:26
本文主要是介绍【51单片机】考试例程|汇编实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
考试的时候千万不要着急,一步一步来,不到最后一刻千万不要放弃,加油,你也一定可以的!
目录
- 中断3个程序
- 第一个程序
- 第二个程序
- 第三个程序
- DA转换
- Triangle
- Triangle2
- 矩形波
- 显示/键盘:
- 数码管的动态显示(C语言实现):
- 矩阵键盘(C语言实现)
- 加法、乘法
- 第二个例程
- 例程
- 例程
中断3个程序
第一个程序
ORG 0000H RESET: AJMP MAIN ORG 000BH AJMP IT0P MAIN: MOV SP, #60H; MOV TMOD, #01; ACALL PT0M0; HRER: AJMP HERE PT0M0: MOV TL0, #0CH MOV TH0, #0FEH SETB ET0; SETB EA; SETB TR0; RET IT0P: MOV TL0, #0CH MOV TH0, #0FEH CPL P1.0; RETI;
第二个程序
ORG 0000H RESET: AJMP MAIN ORG 000BH AJMP IT0P ORG 0100H MAIN: MOV SP, #60H MOV B, 0AH ACALL PT0M0 HERE: AJMP HERE PT0M0: MOV TMOD, #01H MOV TL0, # MOV TH0, # SETB ET0 SETB EA SETB TR0 RET IT0P: MOV TL0,# MOV TH0,# JNZ B, LOOP RTURN: RETI
第三个程序
ORG 0000H RESET: AJMP MAIN ORG 000BH AJMP IT0P ORG 001BH AJMP IT1P ORG 1000H MAIN: MOV SP, #60H ACALL PT0M2 LOOP: MOV C, F0 JNC LOOP HERE: AJMP HERE PT0M0: MOV TMOD, #25H MOV TL0, #FFH MOV TH0, #FFH SETB ET0 MOV TL1, #06H MOV TH1, #06H CLR F0 SETB EA SETB TR0 RET IT0P: CLR TR0 SETB F0 RETI IT1P: CPL P1.0 RETI
DA转换
Triangle
ORG 0100H START: MOV R0, #0FEH MOV A, #00H LOOP: MOVX @R0, A INC A JNZ LOOP
Triangle2
ORG 0100H START: MOV R0, #0FEH MOV A, #00H UP: MOVX @R0, A INC A JNZ UP DOWN: DEC A MOVX @R0, A JNZ DOWN AJMP UP
矩形波
ORG 0100H START: MOV R0, #0FEH MOV A, #data1 MOVX @R0, A ACALL DELAY1 MOV A, #data2 MOVX @R0, A ACALL DELAY2
显示/键盘:
数码管的动态显示(C语言实现):
#include<reg51.h> #define uchar unsigned char #define uint unsigned int #define DigW P1 //设置P1口为位选口(选择第几位的) #define DigD P2 //P2为段选,(选择数码管的哪段亮起来的) uchar show[] = {5, 2, 0, 1, 3, 1, 4}; uchar DigT[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; //共阴极数码管0~9,a-f段码表 /**************************延时函数*************************/ void delay() { uint j; for (j = 0; j < 150; j++); } /**************************主函数*************************/ void main(void) { Dig_W = 0x00;//关数码管 Dig_D = 0x00; while (1) { uchar temp = 0x80; for (uchar i = 0; i < 7; i++) { Dig_W = tmep; Dig_D = DigT[show[i]+1]; delay(); temp = temp >> 1; } } }
矩阵键盘(C语言实现)
#include <reg51.h> #define uchar unsigned char #define uint unsigned int #define Dig_W P1 #define Dig_D P2 #define io_KEY P3 uchar key_T[] = {0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d, 0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x77}; //按键值 uchar dis_T[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; //共阴极数码管0~9,a-f段码表 uchar zhi = 0; /**************************延时函数*************************/ void d_ms() { uint j; for(j=0;j<150;j++); } /**************************显示函数*************************/ void display(uchar num) { uchar i, temp; temp = 0x80; Dig_W = temp; Dig_D = dis_T[num]; temp = temp >> 1; } uint Scanner() { int 列 = 0, 行 = 0, 按键 = 0, a; io_KEY = 0xf0; //P2口后4位置高电平前4位置低电平,当有按键按下时确定列数 while (io_KEY == 0xf0); //判断P2口是否有信号输入 列 = io_KEY; //保存列数 delay(); io_KEY = 0x0f; //P2口后4位置低电平前4位置高电平,当有按键按下时确定行数 while (io_KEY == 0x0f); //判断P2口是否有信号输入 行 = io_KEY; //保存行数 按键 = 列 | 行; return 按键; } /**************************主函数*************************/ void main(void) { uint KeyV = 0; Dig_W = 0x00;//关数码管 Dig_D = 0x00; while (1) { KeyV = Scanner(); //得到按键值 for (int i = 0; i < 16; i++)//判断按键值 { if (key_T[i] == KeyV) { zhi = i; break; } } display(zhi); } }
加法、乘法
MOV R0,#60H MOV R2,#10H CLR A TU: MOV @R0,A INC R0 INC A DJNZ R2,TU MOV R0, #60H MOV R1, #70H MOV R2, #10H TT: MOV A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R2,TT RET END
第二个例程
MOV 70H, #12H MOV 71H, #90H MOV 72H, #78H MOV 60H, #56H MOV 61H, #34H MOV 62H, #12H MOV R0,#70H MOV R1,#60H MOV R2,#03H CLR CY LOOP:MOV A,@R0 ADDC A,@R1 DA A MOV @R1,A INC R0 INC R1 DJNZ R3,LOOP END
例程
MOV 30H,#45H LOOP: MOV A,30H SWAP A ANL A,#0FH MOV 31H,A MOV A,30H ANL A,#0FH MOV 32H,A END MOV 32H,#98H MOV 31H,#76H MOV 30H,#54H MOV R2,#04H LOOP: CLR CY MOV A,30H RLC A MOV 30H,A MOV A,31H RLC A MOV 31H,A MOV A,32H RLC A MOV 32H,A DJNZ R2,LOOP RET END
例程
ORG 0000H START: MOV R0,#60H MOV DPTR,#QW1 MOV R5,#0 MOV R7,#10H LOOP: MOV A,R5 MOVC A,@A+DPTR MOV @R0,A INC R0 INC R5 DJNZ R7,LOOP LJMP QW2 QW1: DB 60H,61H,62H,63H,64H,65H,66H,67H DB 68H,69H,6AH,6BH,6CH,6DH,6EH,6FH QW2:MOV R0,#60H MOV R1,#70H MOV R5,#0FH
这篇关于【51单片机】考试例程|汇编实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南