51单片机数码管0到9循环程序汇编语言
51单片机汇编语言程序设计

51单片机汇编语言程序设计1.题目:数码管显示1~72.题目分析本实验将要求51单片机采用汇编程序来实现以上程序,我们首先要对51单片机进行硬件电路设计,然后编写相应的汇编程序3.硬件电路4.程序设计;-------------------------------------------------------------------------------;选择P1口作为数码管位选;-------------------------------------------------------------------------------org 0hmov p1,h ;启动P1作为数码管位选again: m ov p2,Fh ;0000 0011 1111 显示数字1sjmp againmov p2,h ;0000 0110 显示数字2sjmp againmov p2,Bh ;0101 1011 显示数字3sjmp againmov p2,Fh ;0100 1111 显示数字4sjmp againmov p2,h ;0110 0110 显示数字5sjmp againmov p2,Dh ;0110 1101 显示数字6sjmp againmov p2,dh ;0111 1101 显示数字7sjmp againend5.程序流程本汇编程序的程序流程如下:1)将P1口设置为数码管的位选;2)通过P2口设置相应的数字,P2口的值将会根据数字的不同而不同,以便实现将不同的数字显示到数码管上;3)循环2步骤,不断刷新P2口的值,从而实现数字的不断变化,从而实现将1-7数字在数码管上循环显示。
51单片机数码管的程序代码

wei=1; P0=WM[x]; //取位码 wei=0; delay(5); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
x++;y++; if(4==x) //检测 4 位扫描完全结束?如扫描完成则从第一个开始再次扫描 8 位
x=0; if(y==400) //检测当前数值显示了一小段时间后,需要显示的数值加 1,实现数据 显示的变化 {
y=0; num++; if(num==13)
num=0; } } }
void delay(unsigned int sm) {
for(i=sm;i>0;i--) for(j=70;j>0;j--); }
void main () {
P0=0x00; line =0; P0=0xff; led=0;
wei=1; P0=0x7f; wei=0;
while (1) {
for (a=0;a<10;a++) {
duan=1; P0=table[a]; duan=0; delay (500); } }
} void delay (uint s) {
/*串口初始化,波特率 9600,方式 1 */ void init_com() { TMOD=0x20; //设置定时器 1 为模式 2 TH1=0xfd; //装初值设定波特率 TL1=0xfd;
TR1=1; SM0=0; SM1=1; PCON=0;
//启动定时器 //串口通信模式设置
//波特率不倍频
//段选
unsigned char code table []=
数码管动态显示,显示从1到9,每一位显示一个数字(单片机)

数码管动态显⽰,显⽰从1到9,每⼀位显⽰⼀个数字(单⽚机)//object: 动态显⽰数码管,从1显⽰到9//writer:mike//time: 2020,11,14#include<reg52.h>sbit wei = P2^7;sbit du = P2^6;//数组的类型指的是每⼀个元素的类型, code则指定存储在代码区,⽽⾮code 指存户在内存中。
unsigned int code data1[10] = {0x3F,//00x06,//10x5B,//20x4F,//30x66,//40x6D,//50x7D,//60x07,//70x7F,//80x6F//9};void delay(unsigned int);void main(){while(1){//⾸先打开位选wei = 1;P0 = 0xfe; //让第⼀位显⽰//关闭位选wei = 0;//打开段选du = 1;//显⽰数字1P0 = data1[1];//关闭段选du = 0;//点亮第⼀位之后,延时⼀段时间delay(1);//针对第⼆位数码管//打开位选wei = 1;//设置位选P0 = 0xfd;//关闭位选wei = 0;//打开段选du = 1;//设置段选P0 = data1[2];//关闭段选du = 0;delay(1);//针对第三位数码管//打开位选wei = 1;//设置位选P0 = 0xfb;//关闭位选wei = 0;//打开段选du = 1;//设置段选P0 = data1[3];//关闭段选du = 0;delay(1);//针对第四位数码管//打开位选wei = 1;wei = 0;//打开段选du = 1;//设置段选P0 = data1[4];//关闭段选du = 0;delay(1);//针对第五位数码管 //打开位选wei = 1;//设置位选P0 = 0xef;//关闭位选wei = 0;//打开段选du = 1;//设置段选P0 = data1[5];//关闭段选du = 0;delay(1);//针对第六位数码管 //打开位选wei = 1;//设置位选P0 = 0xdf;//关闭位选wei = 0;//打开段选du = 1;//设置段选P0 = data1[6];//关闭段选du = 0;delay(1);//针对第七位数码管 //打开位选wei = 1;//设置位选P0 = 0xbf;//关闭位选wei = 0;//打开段选du = 1;//设置段选P0 = data1[7];//关闭段选du = 0;delay(1);//针对第⼋位数码管 //打开位选wei = 1;//设置位选P0 = 0x7f;//关闭位选wei = 0;//打开段选du = 1;//设置段选P0 = data1[8];//关闭段选du = 0;delay(1);/* //针对第九位数码管 //打开位选wei = 1;//设置位选wei = 0xff;//关闭位选wei = 0;du = data1[9];//关闭段选du = 0;*/}}void delay(unsigned int x) {unsigned a, b;for(a=x;a>0;a--){for(b=120;b>0;b--); }}。
单只数码管循环显示0~9

项目一:单只数码管循环显示0~9一、设计要求:用汇编语言编写程序实现51单片机控制1只数码管,循环显示0~9。
并用仿真软件仿真出实验结果。
最后,用51单片机开发板实现一支数码管循环显示0到9。
二、设计原理:数码管显示原理:我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形.数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED 的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下。
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。
所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。
可以看出两个编码的各位正好相反。
本实验用到的共阳极0到9编码:0C0H ,0F9H,0A4H,0B0H ,99H,92H ,82H ,0F8H,80H ,90HP0口:P0。
0—P0。
7: 双向I/O (内置场效应管上拉),寻址外部程序存储器时分时作为双向8位数据口和输出低8位地址复用口;不接外部程序存储器时可作为8位准双向I/O 口使用。
PO 结构图如下:四、设计仿真图:主函数 给累加器A 赋初值0 A 加1P0口显示 MOVCA,@A+DPTR 查表 A=10?五、源代码:ORG 0000HSJMP MAINORG 030HMAIN: MOV R1,#00HMOV A,R1D1: ANL A,#0FHMOV DPTR,#TABMOVC A,@A+DPTR ;查表MOV P0,A ;P0口输出,显示数字ACALL DELAYINC R1MOV A,R1 ;A加1CJNE A,#10,D1 ;判断A是否到达10LJMP MAIN ;当A达到10跳回主函数,重新赋值为0 DELAY: MOV R2,#05H ;延时D2: MOV R3,#0FFHD3: MOV R4,#0FFHDJNZ R4,$DJNZ R3,D3DJNZ R2,D2RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数值1到9的共阳极编码END六、结果:数码管循环显示0、1、2、3、4、5、6、7、8、9。
实验二-基本输出(二)循环数码管显示0-9

实验二基本输出—数码管循环显示0-92.1 实验目的1. 通过AT89C52单片机控制一位共阴数码管,实现以一定的时间由0到9循环显示。
2.用Protues设计、仿真以AT89C52为核心的一位共阴数码管实验装置。
3.掌握共阴数码管的控制方法。
2.2 PROTUES电路设计共阴数码管实验装置电路原理图如图2-1所示。
图2-1 电路原理图2.3 实验内容1.从PROTUES库中选取元器件① AT89C52:单片机;② RES、RX8;电阻、8排阻;③ 7SEG-COM-CAT-BLUE:带公共端共阴七段蓝色数码管;④ CAP/CAP-ELEC:电容、电解电容;⑤ CRYSTAL:晶振。
2.放置元器件3.放置电源和地(终端)4.连线5.元器件属性设置6.电气检测2.4 程序设计1.流程图数码管显示程序流程如图2-2所示。
图 2-2 数码管显示程序流程图2.源程序设计C程序设计:#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};uchar num;void delay(uint z){while(z--);}void main(){num=0;while(1){P1=table[num];delay(50000);num++;if(num==10)num=0;}}汇编程序设计:ORG 0HAJMP MAINORG 0BHSJMP INT0SMAIN:MOV TMOD,#01HSETB EASETB ET0SETB TR0MOV TH0,#3CHMOV TL0,#0B0HCLR P2.6MOV R3,#1MOV A,R3MOV R0,#20MOV P1,#3FHSJMP $INT0S:DJNZ R0,NEXTMOV DPTR,#TABMOVC A,@A+DPTRMOV P1,AINC R3MOV A,R3CJNE R3,#10,LMOV R3,#0MOV A,R3L:MOV R0,#20NEXT:MOV TH0,#3CHMOV TL0,#0B0HRETITAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END2.5 PROTUES仿真数码管显示0-9仿真图如图2-3所示。
单片机 1个八段数码管循环显示0-f 汇编语言

【概述】单片机是一种集成了微处理器、存储器和输入输出设备的微型计算机系统,广泛应用于电子产品中。
八段数码管是一种常见的显示器件,可以显示0-9和A-F共16个字符。
本文将以汇编语言为例,介绍如何利用单片机控制一个八段数码管循环显示0-F的过程。
【正文】1. 了解八段数码管八段数码管是由8个LED灯组成,可以显示16种不同的字符。
每个LED代表一个数码,通过控制LED的亮灭来显示相应的字符。
在汇编语言中,我们可以通过控制单片机的输出引脚来实现对八段数码管的控制。
2. 开发环境准备我们需要准备好单片机的开发环境,包括单片机开发板、编程软件等。
常用的单片机有51系列、AVR系列等,在使用之前需要熟悉其指令集和寄存器等相关知识。
3. 控制八段数码管在汇编语言中,我们可以通过对单片机的输出引脚进行控制来操作八段数码管。
具体的操作包括设置引脚状态、发送数据等。
通过编写相应的汇编语言程序,我们可以实现循环显示0-F的功能。
4. 编写汇编语言程序我们需要定义八段数码管每个数字对应的LED亮灭状态。
在主程序中编写循环语句,通过不断改变LED的状态来实现循环显示的效果。
在编写程序时,需要考虑到八段数码管的工作原理和时序要求,以确保程序的稳定性和准确性。
5. 调试和优化在编写完汇编语言程序后,我们需要进行调试和优化。
通过单步调试等手段来检查程序的运行情况,找出可能存在的问题。
可以根据实际情况对程序进行优化,提高程序的执行效率和稳定性。
6. 实际应用完成汇编语言程序的编写和调试后,我们可以将程序烧录到单片机中进行测试。
通过连接八段数码管和单片机的引脚,我们可以观察到八段数码管循环显示0-F的效果。
这个简单的实例展示了如何利用汇编语言控制八段数码管,为我们进一步深入了解单片机的应用奠定了基础。
【总结】通过本文的介绍,我们了解了如何利用汇编语言控制单片机实现八段数码管的循环显示。
汇编语言作为一种底层语言,对于理解单片机的工作原理和功能有着重要的作用。
单片机数字循环显示
AJMPMAIN
ORG0030H
MAIN:
MOV A,#75H
XRL A, #33H
MOVP0,A ;输出到P0口连接的LED灯上
END
(3)循环左移:实现8个发光二极管逐个点亮
OHale Waihona Puke G0000HAJMPMAIN
ORG0030H
MAIN: MOV A,# 00000001B
D1: MOV P0,A
三、实验(训)结果及分析:
四、个人总结
ACALL DELAY
RL A
AJMP D1
DELAY: MOV R1,#0FFH
LOP1: MOV R2,#0FFH
LOP2:
DJNZ R2,LOP2
DJNZ R1,LOP1
RET
END
2、通过KEIL软件分别对上述逻辑运算程序进行编译,并生成“.HEX”文件
3、把生成“.HEX”文件加载到单片机上,观察光二级管点亮情况。电路图如下:
(1)逻辑与:75H∧33H= 31H 01110101B∧00110011B=00110001B
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOV A,#75H
ANL A, #33H
MOVP0,A ;输出到P0口连接的LED灯上
END
(2)逻辑异或:75H⊕33H=46H 01110101B⊕00110011B=01000110B
编写一段汇编语言程序实现将09这10个数循环送p0口七段led数码管上显示
课程名称:《微机原理及应用》
实验(训)名称:汇编语言指令综合运用
实验日期:年月日
一、实验(训)内容:
单片机数码管显示0-9
/************************************************************重庆文理学院电子电气工程学院版权信息:main.c 文件名称:Keil4开发环境描述:LED 个P2口控制8 STC89C51单片机,晶振12M,单片机的硬件平台描述:主要功能描述: 实现闪烁灯的功能函数列表其及功能:延时功能1. DelayTime();2.历史修改记录:备注版本作者时间建立工程zhang fei 2014-10-14 1.0***********************************************************/#include <reg51.h>50#define MainDelayTimevoid DelayTime10ms(unsigned int DelayValue);unsigned char segdata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa0};//unsigned char one=0,two=0;//sbit seg0_select=P2^0;sbit seg1_select=P2^1;sbit key01=P3^0;/************************************************************main.c函数名称:主函数: 功能描述参数列表:无返还参数:***********************************************************/void main(){ int one;while(1){seg0_select=1; //seg1_select=0; //P0=segdata[two]; //DelayTime10ms(4); //seg0_select=0; //seg1_select=1;P0=segdata[one];DelayTime10ms(10);if(one++==10)//// {one=0;// if(two++==10)// one=two=0;// DelayTime10ms(20);if(key01==0){DelayTime10ms(10);if(key01==0){one++;if(one==9){one=0;// two=0;// two++;// if(two==10)// one=two=0;DelayTime10ms(20);// seg0_select=0;while(key01==0)seg1_select=1;}}}}}/************************************************************函数名称:main.c功能描述: 主函数参数列表:无返还参数:***********************************************************/void DelayTime10ms(unsigned int DelayValue){unsigned int a,b;for(a=0;a<DelayValue;a++)for(b=0;b<1828;b++);}//***********************END****************************************。
单片机“0~99”加法计数器程序设计51单片机原理及应用
课程设计课程名称51单片机原理及应用题目名称单片机“0~99”加法计数器程序设计专业班级学生姓名学号指导教师蚌埠学院运算机科学与技术系课程设计任务书目录前言 (6)一.单片机介绍 (6)(一).AT89C51简介 (6)(二).主要特性 (7)(三).特性概述 (7)(四).管脚说明 (7)(五).芯片擦除 (9)(六) (9)二.课程设计的目的和要求 (13)(一).设计目的 (13)(二).课程设计题目 (13)(三).设计任务及要求 (13)三.整体设计思路 (13)(一).硬件设计思路及系统框图 (13)1.硬件设计思路: (13)2.原器件清单 (14)3.系统框图 (14)(二).软件设计思路: (14)(三).对照表 (14)(四).程序流程图 (15)四.硬件设计 (17)(一).芯片主要特性 (17)(二).管脚说明: (17)(三).排阻的作用 (18)(四).电路图说明 (19)1.添加晶振和复位 (19)2.添加P0和P2两个按键 (19)3. 数码管动态显示 (19) (19)五.软件设计说明 (19)}得和体会: (20)(二).建议和意见: (20)八.参考文献 (21)附录: (22)(一).汇编源程序 (22)(二).原理图 (24)前言单片机全称叫单片微型运算机(Single Chip Microcomputer),是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处置能力的中央处置器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、按时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上组成的一个小而完善的运算机系统。
目前单片机渗透到咱们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各类仪表的控制,运算机的网络通信与数据传输,工业自动化进程的实时控制和数据处置,普遍利用的各类智能IC卡,民用奢华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,和程控玩具、电子宠物等等,这些都离不开单片机。
51单片机数码管倒计时汇编语言代码
51单片机数码管倒计时汇编语言代码数码管是一种电子元器件,常用于倒计时、计时和显示数字等场景中。
其中,51单片机作为一种常见的控制芯片,能够对数码管进行比较精确的控制。
本文将介绍51单片机在数码管倒计时中的应用,并给出相应的汇编语言代码。
一、硬件准备首先,我们需要准备一些硬件设备。
具体来说,我们需要一块51单片机的开发板、一组共阳数码管、一个蜂鸣器、一枚按键开关、若干杜邦线和面包板。
在连接各个模块时,需要注意接线的正确性和稳定性。
二、倒计时实现接下来,我们就可以开始编写汇编语言代码了。
代码实现中,需要注意数码管的显示方式以及倒计时时间的设定等细节。
首先,我们定义一些常数,如:COUNT_MAX EQU10;倒计时时长为10sCLK_FREQ EQU12000000;时钟频率为12MHzDELAY_US EQU CLK_FREQ/1000000其中,COUNT_MAX表示倒计时的最大时长,CLK_FREQ表示单片机的时钟频率,DELAY_US表示1us延时所需的机器周期数。
其次,需要定义一些数据段:ORG0SJMP MAINORG0BHDELAY_CNT:DB0ORG0CHMODE_CNT:DB0其中,DELAY_CNT是延时计数器,MODE_CNT是模式计数器。
接着,我们定义主函数:MAIN:CLR P1.5CLR P1.6CLR P1.7MOV TMOD,#01H;设置定时器0为模式1SETB TR0;启动定时器0SETB EASETB ET0SETB EX0MOV R6,#DELAY_USSJMP MODE_SEL首先,需要清空P1.5、P1.6和P1.7引脚,以便控制数码管的显示。
然后,设置定时器0为模式1,并启动定时器0。
接着,开启总中断、定时器0中断和外部中断,设置延时计数器,并跳转到MODE_SEL 模式选择功能。
接下来是MODE_SEL模式选择功能:MODE_SEL:MOV A,MODE_CNTCPL AMOV MODE_CNT,AANL A,#03HJZ MODE_0CJNE A,#01H,MODE_SEL_ENDSJMP MODE_1CJNE A,#02H,MODE_SEL_ENDSJMP MODE_2MODE_SEL_END:CLR TR0CLR EARETI在这个模式下,程序每执行一次,模式计数器加1,并且A寄存器与3进行与操作,最后根据A的值跳转到相应的倒计时模式。