设计与开发

单片机 从0到9 扫盲教程:深入浅出讲解单片机控制单只数码管循环显示0~F

小编 2024-11-24 设计与开发 23 0

扫盲教程:深入浅出讲解单片机控制单只数码管循环显示0~F

最近有好多小伙伴留言说,我发的项目很难,他们都是刚入门的,希望我写一些入门级的教程,那么今天我就从硬件和软件两个方面来给大家讲一下最基本也是十分重要的电路 单片机驱动数码管显示电路。

要弄清楚单片机控制数码管显示字符的原理我们首先要知道:三个概念

单片机:通俗的讲单片机是一种集成电路芯片,利用一些特殊工艺把许多不同功能的模块集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。单片机可以烧进程序,然后从不同的IO口输出规定的电平信号。

七段数码管(如下图):

数码管是一类价格便宜 使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数的器件。一般的七段数码管拥有七个发光二极管(三横四纵)用以显示十进制0至9的数字外加小数点,也可以显示英文字母 A 至 F(b、d 为小写,其他为大写)。现时大部分的七段数码管会以斜体显示。

好了,上面是单片机和数码管的概念,下面说一下单片机的工作原理:

一个单片机要想能正常工作必须满足它工作的最小系统,这个最小系统包括,电源电路,晶振电路,复位电路等,当电源电路给单片机正常供电后,在上电的一瞬间会给复位电容充电从而完成上电复位的动作。单片机复位结束后,我们把需要控制数码管显示的代码烧进单片机,这时候单片机就会根据写的代码从不同的IO口输出不同的电平,从而控制七段数码管每一段的亮灭,而达到显示不同数字的目的。

好了说了半天理论了,下面我们开始实践一下吧!

首先用PROTEUS仿真软件画好单片机最小系统和LED数码管驱动原理图:本项目中用STC89C52

把程序烧进去以后,数码管开始从0到F显示,适当调整源代码参数可以修改显示不同的数字和不同的时间间隔。

51单片机参考源代码如下:

/*单只数码管循环显示0~F 作者 科技小伟1*/

#include <reg51.h>

typedef unsigned char uint8;

typedef unsigned int uint16;

code uint8 LED_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E};

void delay(uint16 x)

{

uint16 i,j;

for(i = x; i > 0; i --)

for(j = 114; j > 0; j --);

}

void main()

{

uint8 i = 0;

while(1)

{

for(i = 0; i < 16; i ++) //i = (i + 1) % 16

{

P0 = LED_CODE[i];

delay(500);

}

}

}

好了以上就是单片机控制数码管显示的全部内容了,本文从软件和硬件两个角度分别讲解,如果有任何意见或者需要设计文件 欢迎留言或者私信,如果你也对单片机感兴趣,那么快点行动起来吧!我们下期再见!

C51单片机 9 数码管从0-9

上节课我们说了显示0,这节课我们显示0-9.

我们可以先建立一个数组,数组就是多个变量在一个小组内

例如 unsigned char i [ ]={0x01 ,0x02,0x03 };

前面是变量类型,i是变量名字,后面中括号里可以写入变量的总个数,如果不写个数那就需要将所有的变量都写在大括号中。如果这样写unsigned char i[ 5]; 说明 i 包括了5个变量,这5个变量的名字分别叫 i[0], i[1], i[2], i[3], i[4] 方括号中的5代表的是总个数这里有点绕,一定要分清楚。

数组中的变量需要用逗号隔开,最后结尾加分号。

咱们按照上次的图片写下数码管显示 0,1,2,3,4,5,6,7,8,9这10个用变量怎么表示,我们让P1.0做控制,P2.0=数码管a段的LED灯,P2.1=数码管b段的LED灯,P2.2=数码管c段的LED灯,P2.3=数码管d段的LED灯,P2.4=数码管e段的LED灯,P2.5=数码管f段的LED灯,P2.6=数码管g段的LED灯,咱们用不到 . 这个符号,所有就不接它了

现在看着图片编写显示的数据,为0显示字段段,为1不显示字段

显示0的时候是abcdef 亮 转化成数据就是0000 0011这个数据是低位在前高位在后,先转换一下位置 就是1100 0000变成16进制就是0xC0,

显示1的时候是bc 亮 转化成数据就是1001 1111这个数据是低位在前高位在后,先转换一下位置 就是 1111 1001 变成16进制就是,0xF9。

显示2的时候是abged 亮 转化成数据就是 0010 0101 这个数据是低位在前高位在后,先转换一下位置 就是 1010 0100变成16进制就是,0xA4。

显示3的时候是abcdg 亮 转化成数据就是0000 1101 这个数据是低位在前高位在后,先转换一下位置 就是 1011 0000变成16进制就是,0xb0。

显示4的时候是fgbc 亮 转化成数据就是1001 1001这个数据是低位在前高位在后,先转换一下位置 就是1001 1001 变成16进制就是0x99,

显示5的时候是afgcd 亮 转化成数据就是0100 1001这个数据是低位在前高位在后,先转换一下位置 就是 1001 0010变成16进制就是,0x92。

显示6的时候是acdefg 亮 转化成数据就是 0100 0001这个数据是低位在前高位在后,先转换一下位置 就是 1000 0010变成16进制就是,0x82。

显示7的时候是abc 亮 转化成数据就是0001 1111 这个数据是低位在前高位在后,先转换一下位置 就是 1111 1000变成16进制就是,0xF8。

显示8的时候是abcdefg 亮 转化成数据就是 0000 0001这个数据是低位在前高位在后,先转换一下位置 就是 1000 0000变成16进制就是,0x80。

显示9的时候是abcdfg 亮 转化成数据就是0000 1001这个数据是低位在前高位在后,先转换一下位置 就是 1001 0000变成16进制就是,0x90。

这样数据有了我们就可以让数码管亮起来了。用1秒钟变一个数字。

#include<reg52.h>

unsigned char code shuzi[ ]={ 0xC0,0xF9, 0xA4,0xb0, 0x99,0x92,0x82,0xF8,0x80,0x90}; 这里的code是让数据存储在flash中

unsigned char dng=0; 变量名是第n个的缩写

void main ()

{

EA=1;

TMOD=0x01;

TH0=0xD8; 定时10ms

TL0=0xEF;

ET0=1;

TR0=1;

while (1)

{ P2=shuzi[dng] ; }

}

void dingshiqi0() interrupt 1

{

static unsingned char i=0;

TH0=0xD8;

TL0=0xEF;

i++; // i 中数每次加1

if(i>=100) //如果i加到100就是100个10毫秒就是1秒

{

i=0; //让i从0开始

dng++;

if(dng>=10)

{ dng=0; }

}

}

相关问答

单片机 数字1-9怎么表示?

在单片机程序中,数字通常有二进制,十进制和十六进制三种表示法,以数字9为例:二进制写成00001001B,B就是二进制的意思,注意,这个字母不能缺少!十进制写...在...

单片机 常见故障及处理?

一些单片机常见问题的解决办法工作和生活中会遇到许许多多的问题,可能让你一时陷于其中,但是总有解决的办法。随时记下遇到的问题,并做好总结,一方面有助于积...

单片机 中数制与数制的转换是怎样实现的? ?

单片机中数制与数制的转换是怎样实现的??关于数制之间的转换,其实在数字电路的书中会讲到,也很容易理解。在我们生活中,十进制经常被我们用到:数字0,1,2,3...

单片机 C语言中一个字母,一个数字各占几个字节 - 懂得

字母a-z,数字0-9都是占一个字节。置于一个数值就是另一回事了,你可以定义:char一个字节,int两个字节,long四个字节,float四个字节字母占一个字节,...

单片机 编程中为何按钮按下是0?-ZOL问答

还有一种接法是:低电平有效,就是你说的按下按键为0了。按键没按下之前,I/O口一直被5v拉高,按下按键,I/O口被接到地端(为0)。这二种接法,区别在于电阻的位置在...

51 单片机 用C语言或者汇编程序如何实现定时1秒?如何设定初始值?如何计算?如何输出方波?如何对外部?

使用定时器实现1秒定时;初始值要看单片机配置的晶振频率了,若12M晶振,初始值为TH0=0x3c;TL0=0xb0;这才是50ms,还要一个单元做计数器,计数20次才是1秒方波...

单片机 中INT0,EX0,ET0,IE0.分别表示什么意思?

INT0外部中断0EX0外部中断0允许位ET0定时计数器0溢出中断允许位IE0外部中断0中断请求标志位INT0外部中断0EX0外部中断0允许位ET0定时计数器0溢出中断允许位IE...

单片机 P0=ox55其中ox55是什么。能详细点吗?

单片机P0=ox55中的ox55是一个十六进制数,它表示的是二进制数01010101。在单片机中,P0代表端口0,该指令将二进制01010101写入端口0中。端口0是单片机与外部设备...

单片机 上p20是什么意思?

单片机上p20是取反的意思P2.0脚输出低电平,点亮LED1就很简单了P20=0,=号在这里不是P20等于0的意思,而是把0赋值给P20,通俗来讲就是P20就像一个框,把0装到...

单片机 中的高8位和低8位是什么意思 - 159****2579 的回答 - 懂得

一般16位单片机分高8位和低8位,就是二进制数0B1111111111111111,16位的数据,前边8位叫高8位,后边叫低8位!如果0B1111111111111111都不懂的话,你看看...

猜你喜欢