【51单片机】考试例程|汇编实现
考试的时候千万不要着急,一步一步来,不到最后一刻千万不要放弃,加油,你也一定可以的!
目录
- 中断3个程序
- 第一个程序
- 第二个程序
- 第三个程序
- DA转换
- Triangle
- Triangle2
- 矩形波
- 显示/键盘:
- 数码管的动态显示(C语言实现):
- 矩阵键盘(C语言实现)
- 加法、乘法
- 第二个例程
- 例程
- 例程
中断3个程序
第一个程序
ORG 0000H
RESET: AJMP MAINORG 000BHAJMP IT0P
MAIN: MOV SP, #60H;MOV TMOD, #01;ACALL PT0M0;
HRER: AJMP HERE
PT0M0: MOV TL0, #0CHMOV TH0, #0FEHSETB ET0;SETB EA;SETB TR0;RET
IT0P: MOV TL0, #0CHMOV TH0, #0FEHCPL P1.0;RETI;
第二个程序
ORG 0000H
RESET: AJMP MAINORG 000BHAJMP IT0PORG 0100H
MAIN: MOV SP, #60HMOV B, 0AHACALL PT0M0
HERE: AJMP HERE
PT0M0: MOV TMOD, #01HMOV TL0, #MOV TH0, #SETB ET0SETB EASETB TR0RET
IT0P: MOV TL0,# MOV TH0,# JNZ B, LOOP
RTURN: RETI
第三个程序
ORG 0000H
RESET: AJMP MAINORG 000BHAJMP IT0PORG 001BHAJMP IT1PORG 1000H
MAIN: MOV SP, #60HACALL PT0M2
LOOP: MOV C, F0JNC LOOP
HERE: AJMP HERE
PT0M0: MOV TMOD, #25HMOV TL0, #FFHMOV TH0, #FFHSETB ET0MOV TL1, #06HMOV TH1, #06HCLR F0SETB EASETB TR0RET
IT0P: CLR TR0SETB F0RETI
IT1P: CPL P1.0RETI
DA转换
Triangle
ORG 0100H
START: MOV R0, #0FEHMOV A, #00H
LOOP: MOVX @R0, AINC AJNZ LOOP
Triangle2
ORG 0100H
START: MOV R0, #0FEHMOV A, #00H
UP: MOVX @R0, AINC AJNZ UP
DOWN: DEC AMOVX @R0, AJNZ DOWNAJMP UP
矩形波
ORG 0100H
START: MOV R0, #0FEHMOV A, #data1MOVX @R0, AACALL DELAY1 MOV A, #data2MOVX @R0, AACALL 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 P3uchar 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,#60HMOV R2,#10HCLR A
TU: MOV @R0,AINC R0INC ADJNZ R2,TUMOV R0, #60HMOV R1, #70HMOV R2, #10H
TT: MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,TTRETEND
第二个例程
MOV 70H, #12HMOV 71H, #90HMOV 72H, #78HMOV 60H, #56HMOV 61H, #34HMOV 62H, #12HMOV R0,#70HMOV R1,#60HMOV R2,#03HCLR CY
LOOP:MOV A,@R0ADDC A,@R1DA AMOV @R1,AINC R0INC R1DJNZ R3,LOOPEND
例程
MOV 30H,#45H
LOOP: MOV A,30HSWAP AANL A,#0FHMOV 31H,AMOV A,30HANL A,#0FHMOV 32H,AENDMOV 32H,#98HMOV 31H,#76HMOV 30H,#54HMOV R2,#04H
LOOP: CLR CYMOV A,30HRLC AMOV 30H,AMOV A,31HRLC AMOV 31H,AMOV A,32HRLC AMOV 32H,ADJNZ R2,LOOPRETEND
例程
ORG 0000H
START: MOV R0,#60HMOV DPTR,#QW1MOV R5,#0MOV R7,#10H
LOOP: MOV A,R5MOVC A,@A+DPTRMOV @R0,AINC R0INC R5DJNZ R7,LOOPLJMP QW2QW1: DB 60H,61H,62H,63H,64H,65H,66H,67HDB 68H,69H,6AH,6BH,6CH,6DH,6EH,6FHQW2:MOV R0,#60HMOV R1,#70HMOV R5,#0FH
【51单片机】考试例程|汇编实现相关推荐
- 51单片机仿真例程-开关控制
通过读取针脚电平高低来实现控制,51单片机的针脚没有stm32的状态多和复杂. 代码: #include<reg51.h>#include<reg51.h> sbit x=P3 ...
- 51单片机仿真例程-led点阵屏
用51单片机驱动led点阵屏 #include <reg51.h> unsigned char hang[10]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0 ...
- 51单片机考试内容补充
一.选择题(每题1分,共10分) 1. 对程序计数器 PC 的操作( ). A)是自动进行的 B)是通过传送进行的 C)是通过加1指令进行的 D)是通过减1指令进行的 2. ...
- 51单片机 c语言 汇编,51单片机之时钟(C语言和汇编两种方式实现)
1.C语言实现 #include typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned ...
- 51单片机仿真例程-PWM直流电动机
通过单片机输出PWM波,控制占空比实现控制电动机的转速,方向,启停. 代码: #include<reg51.h> #include<intrins.h> #define uin ...
- 51单片机仿真例程-蜂鸣器
通过单片机定时器输出方波,不同的频率声调不同. #include<reg52.h> sbit beep = P1^5;unsigned char code music_h[]={0xfc, ...
- 51单片机仿真例程-双机串行通信
计算机与外界通信进行信息交换成为通信.通信的方式分为串行通信和并行通信. 并行通信是指数据同时进行传送,串行通信是指数据一位一位地依次传输,两种通信方式各有优缺点. #include<reg51 ...
- 51单片机汇编学习例程(9)——ADC0809篇
ASM9_ADC0808: ADC0808采集ADC参数,数码管显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ************************** ...
- 51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码
51单片机开发系列一 51单片机开发环境搭建以及入门汇编代码 象棋小子 1048272975 1. 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称.目前教科书基 ...
最新文章
- LVS 配置Iptables防火墙及故障解决
- 页面残留数据该如何处理
- 惊呆!不用一张图片,却训出个图像识别SOTA?
- CXF 调用C#.net的WebService
- python pil_python PIL 图像处理
- 启迪公交上云助力北京公交二维码乘车业务系统顺利上线
- SSO单点登录学习总结(3)—— 基于CAS实现单点登录实例
- 如何应对互联网和物联网化带来的工业安全新风险?
- android - 房源登记模版
- 面向对象与面向过程编程的区别
- Linux 服务器安装、配置和维护,一文看全~
- 转:用迅雷下载Android SDK全系列
- NVIDIA JETSON NANO三个版本核心的对比
- 综述 | 语义分割经典网络及轻量化模型盘点
- 通过后台数据在百度地图标记多个点
- Spark教程——(10)Spark SQL读取Phoenix数据本地执行计算
- vim只读模式修改文件
- 关于使用Swagger-ui时文档显示实体类中隐藏部分字段的问题
- mysql 映射到map null_mybatis处理查询map列表属性为null的问题,而导致查询map无该key对象...
- svn - 冲突及解决方案