stc89c52数码管怎么左右移动

2023-02-03

本文主要是 stc89c52数码管怎么左右移动 相关的知识问答,如果你也了解,请帮忙补充。

数组是一组有序数据的集合,数组中每一个数据都是同一数据类型。数组中的元素可以用数组名和下标来唯一确定。

数组的一般格式定义如下:

数据类型 数组名[常量表达式] = 元素表;

例如:
unsigned char tabel[3] = [0x3F, 0x06, 0x5B,];
P0 = tabel[0]; // P0此时的值为0x3F

数码管动态显示数字 123
#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选

// 毫秒级延时函数定义
void delay(uint z) // 毫秒级延时函数定义
uint x, y;
for (x = z; x > 0; x--)
for (y = 114; y > 0; y--)





void main() // main函数自身会循环

while(1)
/*第一位显示 数字 1*/
P0 = 0XFF; // 清除断码 如果没有为P0 初始化赋值 0XFF,那么 P0的值会是上一个打开段选锁存器过程中赋予的值,执行到这里 会把段选值赋给锁存器中P0,导致数码管显示错误。
WE = 1; // 打开位选锁存器
P0 = 0XFE; // 1111 1110 选通第一位数码管
// P0 = 0X00; // 0000 0000 表示选通所有位数码管
WE = 0; // 锁存位选数据

DU = 1; // 打开段选锁存器
P0 = 0X06; // 0000 0110 显示“1”
DU = 0; // 锁存段选数据
delay(5); // 对每次数码管的切换进行 5毫秒延时操作

/*第二位显示 数字 2*/
P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0XFD; // 1111 1101 选通第二位数码管
// P0 = 0X00; // 0000 0000 表示选通所有位数码管
WE = 0; // 锁存位选数据

DU = 1; // 打开段选锁存器
P0 = 0X5B; // 0101 1011 显示“2”
DU = 0; // 锁存段选数据
delay(5);

/*第三位显示 数字 3*/
P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0XFB; // 1111 1011 选通第三位数码管
// P0 = 0X00; // 0000 0000 表示选通所有位数码管
WE = 0; // 锁存位选数据

DU = 1; // 打开段选锁存器
P0 = 0X4F; // 0100 1111 显示“3”
DU = 0; // 锁存段选数据
delay(5);




数码管动态显示数字 123 (代码优化)
#include <reg52.h>//包含51头文件
#include <intrins.h>//包含移位标准库函数头文件

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选

//共阴数码管段选表0-9
uchar code tabel[]= 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,;

/*====================================
函数 : delay(uint z)
参数 :z 延时毫秒设定,取值范围0-65535
返回值 :无
描述 :12T/Fosc11.0592M毫秒级延时
====================================*/
void delay(uint z)

uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);


/*====================================
函数 :display(uchar i)
参数 :i 显示数值,取值范围0-255
返回值 :无
描述 :三位共阴数码管动态显示
====================================*/
void display(uchar i)

uchar bai, shi, ge;
bai = i / 100; //236 / 100 = 2
shi = i % 100 / 10; //236 % 100 / 10 = 3
ge = i % 10;//236 % 10 =6

//第一位数码管
P0 = 0XFF;//清除断码
WE = 1;//打开位选锁存器
P0 = 0XFE; //1111 1110
WE = 0;//锁存位选数据

DU = 1;//打开段选锁存器
P0 = tabel[bai];//
DU = 0;//锁存段选数据
delay(5);

//第二位数码管
P0 = 0XFF;//清除断码
WE = 1;//打开位选锁存器
P0 = 0XFD; //1111 1101
WE = 0;//锁存位选数据

DU = 1;//打开段选锁存器
P0 = tabel[shi];//
DU = 0;//锁存段选数据
delay(5);

//第三位数码管
P0 = 0XFF;//清除断码
WE = 1;//打开位选锁存器
P0 = 0XFB; //1111 1011
WE = 0;//锁存位选数据

DU = 1;//打开段选锁存器
P0 = tabel[ge];//
DU = 0;//锁存段选数据
delay(5);


void main()//main函数自身会循环

while(1)

display(123); //数码管显示函数


数码管动态显示数字 12345678 (代码优化)
#include <reg52.h>//包含51头文件
#include <intrins.h>//包含移位标准库函数头文件

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选

//共阴数码管段选表0-9
uchar code tabel[]= 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,;

/*====================================
函数 : delay(uint z)
参数 :z 延时毫秒设定,取值范围0-65535
返回值 :无
描述 :12T/Fosc11.0592M毫秒级延时
====================================*/
void delay(uint z)

uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);


/*====================================
描述 :八位共阴数码管动态显示
====================================*/
void display(uchar num1, uchar num2, uchar num3, uchar num4, uchar num5, uchar num6, uchar num7, uchar num8)


/*第一位显示*/
P0 = 0XFF;//清除断码
WE = 1;//打开位选锁存器
P0 = 0XFE; //1111 1110
WE = 0;//锁存位选数据

DU = 1;//打开段选锁存器
P0 = tabel[num1];//
DU = 0;//锁存段选数据
delay(1);

/*第二位显示*/
P0 = 0XFF;//清除断码
WE = 1;//打开位选锁存器
P0 = 0XFD; //1111 1101
WE = 0;//锁存位选数据

DU = 1;//打开段选锁存器
P0 = tabel[num2];//
DU = 0;//锁存段选数据
delay(1);

/*第三位显示*/
P0 = 0XFF;//清除断码
WE = 1;//打开位选锁存器
P0 = 0XFB; //1111 1011
WE = 0;//锁存位选数据

DU = 1;//打开段选锁存器
P0 = tabel[num3];//
DU = 0;//锁存段选数据
delay(1);

/*第四位显示*/
P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0XF7; // 1111 0111 选通第四位数码管
WE = 0; // 锁存位选数据

DU = 1; // 打开段选锁存器
P0 = tabel[num4];//
DU = 0; // 锁存段选数据
delay(1);

/*第五位显示*/
P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0XEF; // 1110 1111 选通第五位数码管
WE = 0; // 锁存位选数据

DU = 1; // 打开段选锁存器
P0 = tabel[num5];//
DU = 0; // 锁存段选数据
delay(1);

/*第六位显示*/
P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0XDF; // 1101 1111 选通第六位数码管
WE = 0; // 锁存位选数据

DU = 1; // 打开段选锁存器
P0 = tabel[num6];//
DU = 0; // 锁存段选数据
delay(1);

/*第七位显示*/
P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0XBF; // 1011 1111 选通第七位数码管
WE = 0; // 锁存位选数据

DU = 1; // 打开段选锁存器
P0 = tabel[num7];//
DU = 0; // 锁存段选数据
delay(1);

/*第八位显示*/
P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0X7F; // 0111 1111 选通第八位数码管
WE = 0; // 锁存位选数据

DU = 1; // 打开段选锁存器
P0 = tabel[num8];
DU = 0; // 锁存段选数据
delay(1);


void main()//main函数自身会循环

while(1)

display(1, 2, 3, 4, 5, 6, 7, 8); //数码管显示函数


更多相关内容
0832+STC89C52RC数码管电压表
采用ADC0832、STC89C52RC制作了数码管显示的数字电压表,电路简洁,初学者容易制作成功。
stc89c52单片机数码管动态显示
在单片机开发板上,通过单片机控制数码管动态显示5201314,并闪烁显示
单片机学习
STC89C52驱动数码管
1.硬件设计数码管实验硬件设计中使用到的数码管是共阳极类型的。因为数码管的片选引脚“1/2/3/4”都通过PNP 三极管来提供高电平,为什么要选用PNP 三极管和共阳极数码管的组合?因为共阳极数码管共阳端直接接电源,... 展开全文
c语言c52数码管
STC89C52单片机数码管介绍以及代码示例
LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件数码管分为共阳极连接和共阴极连接两种:1,共阴极连接就是说3,8这一头连得是负极,所以在下面的那头给上高电平(即置... 展开全文
STC89C52单片机 数码管静态显示
数码管显示原理 数码管根据内部连接不同分为共阴极和共阳极。八段数码管内部有8颗LED组成,如果想要显示特定字形只需控制相应的LED亮起,其他LED熄灭即可。 静态与动态显示 静态显示: LED显示器工作方式有两种:...
STC89C52RC - 12 - 静、动数码管显示
这里的 静态 动态 指的是 数码管 发光的时候 控制它的io口 状态 或者 数码管 发光段的状态 1、硬件介绍 1数码管 分为 共阴或者共阳 数码管里面封装的都是 LED小灯珠 共阳 阳极都连在一起 阳极接正 负极都是分开...
8051单片机实战分析(以STC89C52RC为例) | 06 - 动态数码管驱动
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code ...
动态扫描
延时函数液晶时钟_数码管_时钟_STC89C52_
基于stc89c52的数码管时钟按键修改时间晶振频率11.0592
STC89C52与数码管的详细接线图
适合静态显示,共阳数码管或共阴数码管都可以
stc89c52单片机开发板电路原理图
stc89c52单片机开发板电路原理图。主要包括模拟量采集ADC,AD/DA转换。485传输,点阵模块接口,红外发送,温湿度传感器,蜂鸣器,超声波模块,按键,指示灯,最小系统,外扩接口,USB供电以及串口传输,4位七段...
Dan_数码管_STC89C52_
基于stc89c52单片机,在数码管上左右移动显示字符
STC89C52单片机 数码管动态显示_ʚVVcatɞ的博客_单片机数...
WE = 1; // 打开位选锁存器 P0 = 0XFE; // 1111 1110 选通第一位数码管 // P0 = 0X00; // 0000 0000 表示选通所有位数码管 WE = 0; // 锁存位选数据 DU = 1; // 打开段选锁存器 P0 = 0X06; // 0000 ...
【Keil5 C51】AT89C52 数码管的动态显示_Lisiluan的博客_keil...
数码管的动态显示原理第一个数码管显示0,1s后第二个数码管显示1,直到第六个数码管显示5后又重新开始#include <reg52.h>#define uint unsigned int#define uchar unsigned char sbit LE_D = P2^6;sbit LE_W = P2^7;u...
(单片机作业一)STC89C52动态数码管显示520
设计背景 单片机老师要求在520当天,利用手上的单片机,实现一个专属计算机专业的浪漫。 设计基础目的 ... stc89c52做个基础表白 #include<reg51.h> #include<intrins.h> typedef unsign
STC89C52RC单片机学习板PDF原理图+配套试验例程KEIL源码程序(105例)
STC89C52RC单片机学习板PDF原理图+配套试验例程KEIL源码程序(105例): 10 LED循环左移 100.12864液晶基础显示 101.1602动态显示 102.红外解码1602液晶显示 103.红外解码数码管显示 105 NRF24L01开发板一 11 LED循环...
51单片机STC89C52 数码管动态_昵称90天可改的博客
DELAY3 DJNZ R1,DELAY4 CLR RS1 RET TABLEK: ;共阴数码管 DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H TABLEW: ;位选控制 DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH ...
单片机STC89C52实验 DAY 2 数码管_马踏飞燕&lin_li的博客
动态数码管显示 #include<reg51.h>#include<intrins.h>typedefunsignedcharu8;typedefunsignedintu16;sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;voiddelay(inti)while(i--);//段选u8 code smgduan[]=0x3f,0x06,0x5b,...
基于stc89c52的44矩阵键盘输入数码管
本系统以STC89C52单片机为核心,使用4×4矩阵键盘作为数据输入方式,完成独立按键的测试,含有电路图及语言程序设计。
小白上路之51单片机(STC89C52)--数码管
目录数码管介绍显示器及其接口(本文主要针对LED显示器来介绍)开发板原理图数码管是如何显示出字符的静态数码管工作原理数码管静态显示原理74HC573芯片的使用源程序--静态数码管动态数码管工作原理数码管动态显示...
8051单片机(STC89C52)八段数码管轮流显示0~7_好梦成真Kevin的博客-CS...
在8个数码管上自右开始, 轮流显示 0 ~ 7. #include<STC89C5xRC.H> voiddelay()//提供时延 inti, j; for(i =0; i <300; i++) for(j =0; j <300; j++) ;
51单片机STC89C52 数码管静态_昵称90天可改的博客
【51单片机】STC89C52数码管静态显示实验,含c代码(5) 1.参考教程:清翔51单片机教程2.基本原理 : 1)数码管位数:几个数码管连在一起,就是几位。 2)数码管共级:共阴极-数码管中间的线是GND。共阳极-数码管中间的线是VCC。用万用...
基于 STC89C52 单片机 DS1302 时钟芯片定时开关的设计
绍一种以STC89C52单片机、DS1302,1602液晶显示为核心,具备调节时间,设置开启时间与关闭时间的定时开关的实现过程。采用C语言编写,与汇编语言相比具有更好的移植性和可读性,便于修改和增减功能,并通过Protues...
基于STC89C52单片机跆拳道比赛计时计分系统设计与实现
采用STC89C52单片机进行控制,设计并实现了一套跆拳道比赛计时计分系统。在进行跆拳道比赛时,可以在计分器上同步显示参赛队伍双方实时得分。该计时计分系统的特点是在比赛进行到一半需要交换场地停止计时,以及在每...
8051单片机实战分析(以STC89C52RC为例) | 05 - 静态数码管驱动
我们看一下数码管内部结构的示意图: 数码管分为共阳和共阴两种: 共阴数码管就是 8 只 LED 小灯的阴极是连接在一起的,阴极是公共端,由阳极来控制单个小灯的亮灭。 同理共阳数码管就是阳极接在一起。 看到这里我们就不难猜出,...
STC 89C52 单片机引脚对应的功能以及实例讲解_Gorit的博客_s...
二、数码管的使用 三、矩阵键盘的使用 四、液晶显示补充 先附上一张stc89C52引脚图 光看引脚是不够的,下面我们看看实物图是什么样子的 一、P1^0~7 对应八个二极管 二级管的实物图如下 从上往下 分别对应引脚中的 P1^0 ~ P1^7...
单片机课设stc89c52.zip
由stc89c52控制的四位倒计时秒表,里边有c语言代码和仿真, 实现的功能如下: 1.通过按键设定倒计时时间; 2.逐秒倒计时; 3.使用4位一体数码管显示时间; 4.时间到数码管闪烁显示0000
基于单片机STC89C52的LED数码管温度显示及报警器的实现
基于单片机STC89C52的LED数码管温度显示及报警器的实现,资源不错,希望对您有用。
参考知识1 按下K1按键并松开时,LED向左移动一位,按下K2按键时LED向右移动一位。 java servlet 51单片机STC89C52控制LED流水灯左移动。 参考知识B 数码管移位循环显示原理
其实数码管的移位循环显示还是通过一位一位的显示,循环显示的主要特点就是所有数码管的段选线并联到一起,由位控制线控制哪一位数码管有效。循环显示其实说的就是单片机轮流向各位数码管送出相应的字形码与相应的位选吗。利用发光管得余辉和视觉暂留作用,使人们感觉所有数码管都是在同时显示。循环显示的亮度效果会比静态数码管显示的亮度暗一些,所以在选择限流电阻的过程中阻值应小于静态数码管的阻值。
参考知识C 数码管移位循环显示原理
其实数码管的移位循环显示还是通过一位一位的显示,循环显示的主要特点就是所有数码管的段选线并联到一起,由位控制线控制哪一位数码管有效。循环显示其实说的就是单片机轮流向各位数码管送出相应的字形码与相应的位选吗。利用发光管得余辉和视觉暂留作用,使人们感觉所有数码管都是在同时显示。循环显示的亮度效果会比静态数码管显示的亮度暗一些,所以在选择限流电阻的过程中阻值应小于静态数码管的阻值。
参考知识D 数码管移位循环显示原理
其实数码管的移位循环显示还是通过一位一位的显示,循环显示的主要特点就是所有数码管的段选线并联到一起,由位控制线控制哪一位数码管有效。循环显示其实说的就是单片机轮流向各位数码管送出相应的字形码与相应的位选吗。利用发光管得余辉和视觉暂留作用,使人们感觉所有数码管都是在同时显示。循环显示的亮度效果会比静态数码管显示的亮度暗一些,所以在选择限流电阻的过程中阻值应小于静态数码管的阻值。
相似知识
如何利用单片机让4位数码管显示? 程序如下(用的是STC89C52芯片):#include<reg52.h>//52系列单片机头文件#define uchar unsigned char#de
单片机怎么与交换机连接 参考知识1单片机在程控交换机中的应用摘要:本文介绍单片机在程控交换机中的应用,使用五个ATMEL公司的AT89C52和AT89C51作为主控制器和从控制器,多机通讯,硬件结构清晰,模块化程序结构。0引
关于单片机控制温度,时钟的编程谁知道啊,AT89C51 #include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<intrins.h>sbitSCK=P3^6; //时钟
为啥四位数码管只有6个引脚 参考知识1stc单片机驱动。四位数码管是一种半导体发光器件,因为是属于stc单片机驱动,导致只有6个引脚,其基本单元是发光二极管。
四位共阳极数码管如何设置位选c语言编码 如果是AT89***或者STC**单片机,如图依图完整的控制代码没时间弄你可以百度,资源多的是,如果只想知道数码位的控制方法可以说一下,根据你图示,只要在三极管的基极加上低电平就可以给相应的数码位加电
单片机烧录器接两条线可以吗 参考知识1单片机烧录器不可以接两条线。一般来说,对于AT89C51单片机需要用带有12V电源的烧录器来烧录,对于STC单片机仅需要USB转TTL串口线就可以下载烧录,你用的单片机怎样烧录程序需要查看你
在如皋哪里买数码产品,比如移动硬盘、硬盘盒等。 到如皋买还不如到南通,他们也是拿的南通的货,要是不精通,会被别人宰的。建议你去南通的宝龙、八仙城、数码港,都不错参考知识1苏宁五星,还有永乐,以及苏宁斜对面的新时代,都在文峰南边点,基本集中在那片,买
如何选择数码伴侣   如今市面上出现了众多的品牌,众多的型号,那么到底怎么的规格的是符合自己需求的呢?  1.保护数据最重要  当我们把珍贵的照片往这个小小的机器里面copy的时候,如果没有任何显示和没有相应保护功能的