自学单片机编程之数码管显示

发布者:Serendipity66最新更新时间:2014-12-26 来源: 51hei关键字:单片机  编程  数码管显示 手机看文章 扫描二维码
随时随地手机看文章

对于我以前学习过的东西以周记的形式进行总结整理!

当我对于流水灯和一些基础的C语言知识后,我们就要和数码管打交道了,数码管是显示数字的一种媒介,简单的说就是八个二极管通过亮灭来显示数字符号,是多个二极管更高级的表达方式。


现在我们用的基本都是共阴或者共阳数码管,就是八个发光二极管的阴极或阳极在数码管内部连在一起,我们只需要用控制八个二极管的引脚来控制每个二极管的电压高低来控制二极管的亮灭,从而显示出不同的数字或符号。注意的共阴数码管是高电平点亮,共阳数码管是低电平点亮。(主要是模电知识:发光二极管原理)
首先学会控制一个数码管
P0是控制数码管内部8个发光二极管亮灭的I/O控制口

上面unsigned  char  code   table【】我之前没有搞注释,现在解释一下unsigned  char是数

组类型 code是编码的意识  table是数组名    【】里的是显示数字的控制发光二极管的编码从左到右分别是1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

会了一个数码管之后就要弄八个数码管或者六个数码管甚至更多 我就举最有代表的时钟六位数码管显示。当数码一多,就要分别控制每个数码管  这就要用到另一个I/O控制口P2,控制方法和数码管一样,就是把六个数码管看成是六个二极管,通过控制共阴或者共阳端的电位高低来控制数码管的亮灭!

#include                                                          //51系列单片机头文件

#define     uchar        unsigned  char                    //宏定义

uchar        code          table []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/***************************数码管扫描延时****************************/

void  delays(void)

{

         uint  i,j;

                   for(i=0;i<2;i++)

                            for(j=0;j<110;j++);

}

void  main(void)

{

P0=table [1];

                   P2=0xfd;

                   delays();                                                                                      

                            P0=table [2];

                            P2=0xfe;

                            delays();                                                                             

 

                                     P0=table [3];

                                     P2=0xf7;

                                     delays();                                                                   

                                              

                                               P0=table [4];

                                               P2=0xfb;

                                               delays();                                                          

                                              

                                                        P0=table [5];

                                                        P2=0xdf;

                                                        delays();                                                                                                         

                                                                 P0=table [6];

                                                                 P2=0xef;

                                                                 delays();  

while(1)

}              显示的效果就是012345这是静态显示  如果是你想要动态显示在上面的程序里用一个for循环语句table【】内用字母或简单运算表示

   简单举例:

#include                                                          //51系列单片机头文件

#define     uchar        unsigned  char                    //宏定义

uchar        code          table []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/***************************数码管扫描延时****************************/

void  delays(void)

{

         uint  i,j;

                   for(i=0;i<2;i++)

                            for(j=0;j<110;j++);

}

void  main( )

{   uchar   i;

    while(1)//无限循环语句

{

For(i=0;i<9;i++)//循环语句

{       if(i==9)  //选择语句

       {

          i=0;

       }

  P0=table [i];

                   P2=0xfd;

                   delays();                                                                                      

                            P0=table [i];

                            P2=0xfe;

                            delays();                                                                             

 

                                     P0=table [i];

                                     P2=0xf7;

                                     delays();                                                                   

                                              

                                               P0=table [i];

                                               P2=0xfb;

                                               delays();                                                          

                                              

                                                        P0=table [i];

                                                        P2=0xdf;

                                                        delays();                                                                                                         

                                                                 P0=table [i];

                                                                 P2=0xef;

                                                                 delays();  

}

}

}      显示效果是不断循环显示000000、111111、222222、~~~、999999当然也可以显示不一样的,原理都一样 参数改变   显示效果也不一样!

 

关键字:单片机  编程  数码管显示 引用地址:自学单片机编程之数码管显示

上一篇:RTX51 Tiny 实时内核理解
下一篇:基于51单片机之LCD1602时钟实验例程

推荐阅读最新更新时间:2024-03-16 13:49

单片机红外遥控数字钟
闲来无事,练练单片机编程。在原来的一个数字钟的基础上增加红外遥控功能。硬件是2051单片机,int0口作为红外信号输入。红外接收头用家电中常用的一体化接收头。脚位是地,正电源,信号输出。信号输出脚接到2051的第6脚,平时红外输出呈高电平,收到信号时呈低电平,2051产生外部中断。程序中加入外部中断int0中断处理代码和定时器1中断处理代码。定时器1作为计数器,用于测量红外信号的脉冲宽度。int0处理过程,关闭计数器1,取出数值放到一个数组中。当数组长度达到34时,取出数据,根据脉冲宽度分辨0和1,测得宽度分别是4和8,取其平均值,大于6的为1,小于6的为0。其中,10到18位为识别码,18到26位为数据。识别码用于区别不同厂家的
[单片机]
<font color='red'>单片机</font>红外遥控数字钟
单片机非接触式智能测温系统程序
摘要: 本系统以单片机STC89C51为核心,使用红外传感器作为感应器,检测是否有人要进行温度测量,将检测的结果转化为电信号传输至单片机中。单片机再进行判断是否启用红外测温传感器进行温度数据采集。将采集的数据送至单片机进行计算、处理后传输到OLED显示屏进行显示,并且由MP3播放器进行播报温度是否正常。 二、系统硬件的具体设计与实现 2.1系统原理和框图 非接触式智能测温系统的硬件组成如下图2-1所示。本系统主要由STC89C51单片机及其外围电路、红外检测传感器、红外测温传感器、显示装置、MP3播放器等五部分组成。单片机循环检测由红外传感器检测传输来的电信号,据此产生的电信号来判断是否有人,同时红外测温传感器进行相应的工
[单片机]
<font color='red'>单片机</font>非接触式智能测温系统程序
基于51单片机的万用表设计
1 工作原理 万用表是电气、电子行业中常用的仪器之一,本文通过对MCS-51单片机进行电路及软件开发,实现电阻、电感、电容的精确测量,同时利用DDS芯片发生任意频率波形。其系统整体结构框图如图1所示。 单片机取得按键值,从而判断工作模式,具体测量不同类型由硬件或软件选通相应电路。 电阻:被测电阻与内部已知电阻串联,测其公共端电压与两电阻总电压。 电容:采用被测电阻与内部已知电阻构成RC CMOS振荡器,记录其频率通过C=l/πRf求得(C:电容值,R:电阻值,f:频率值)。 电感:利用被测电感与内部已知电容构成LC振荡电路,记录其频率通过 求得(f:频率值,L:电感值,C:电容值)。 频率:将被测信号接
[单片机]
基于51<font color='red'>单片机</font>的万用表设计
51单片机定时器实验
一.实验要求 由8031内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。P1口的P1.0-P1.7分别接八个发光二极管。要求编写程序模拟一时序控制装置。开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮......一直循环下去。 二.实验目的 1.学习8031内部计数器的使用和编程方法。 2. 进一步掌握中断处理程序的编程方法。 三.实验电路及连线 P1.0--P1.7 接 L1--
[单片机]
51<font color='red'>单片机</font>定时器实验
51单片机不断电下载程序
stc单片机支持串口isp程序下载,不必使用专用下载器,仅使用串口就能下载程序。但每次下载程序都要断电再上电,比较麻烦。 下面介绍一种不需断电就能下载程序的方法,在程序调试时比较方便。 基本原理: stc单片机有专用的复位寄存器,通过对该寄存器写入不同的数值可以实现单片机热启动复位。 寄存器功能如下图所示: 由上图可以看出只要满足某个条件,向ISP_CONTR写入0x60,就可以实现从ISP监控区软启动启动 某个条件设置为:当串口接收到0xaa数据时,单片机执行ISP_CONTR=0x60; 指令,从ISP监控区软启动启动。 演示程序如下: //*************************STC12C5410AD软启
[单片机]
51<font color='red'>单片机</font>不断电下载程序
关于STM32的USB问题
1、stm32f10xusb无法识别 问:我现在用的片子是103t8和开发板的是103vct6的,没有8M的晶振所以我用了6M的但是程序里面我已经改了,12倍频,usb时钟1.5分频我没动,还是开发板的那部分,1.5k的上拉直连3.3,我把开发板控制usben的管教断开直接接了3.3v上拉也可以识别usb我做的板子也改了1。5的上拉接3.3v还是不能识别,两个程序的差别只有外部晶振倍频系数不同求解 答:解决这个办法1、你先用8M晶振试试程序,如果还是不行,就说明当前硬件有问题2、时钟配置的时候,分频晶振、倍频,然后获得系统时钟,建议你检查一下这段代码,确定系统时钟是72M的。
[单片机]
Microchip扩展PIC24 Lite单片机产品组合
全球领先的整合单片机、混合信号、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)宣布,其16位PIC®单片机(MCU)产品组合新增一个低成本的PIC24F“KM”系列。该系列采用多种低引脚数的封装,提供高达16 KB闪存、2 KB RAM和512B EEPROM以及先进模拟集成,适用于成本敏感的汽车、消费电子、医疗和工业应用。 观看简短视频,请浏览: http://www.microchip.com/get/99E7 PIC24F“KM”系列提供了一个全新水平的集成模拟功能,例如:具有阈值检测的12位ADC、模拟控制环路和精密比较器参考的8位DAC,以及协助传感器放大
[单片机]
三分钟告诉你:AVR单片机的熔丝与解锁
AVR单片机的熔丝位配置是AVR单片机初学者很容易出错的地方,其实只要注意一些事项,还是能够尽量避免单片机被锁死,即使单片机被锁死,也可以使用一些方法解锁,本文讲述我在刚开始接触AVR单片机时熔丝位配置出现的一些问题。 1、AVR单片机的熔丝位是比较独到的特征,可以控制系统的时钟,JTAG调试、看门狗、芯片加密等等。图1是progisp软件,对于初学者来说,对熔丝位不熟悉,可以先将2处的编程熔丝对勾去掉,这样在编程的时候,就不会对熔丝位进行编程,单片机出厂的默认设置就可以使用。点击1处进入熔丝位配置界面。 图1 图2为位配置方式,这里的每一位都不能随意点击,尤其是熔丝低位控制时钟的地方,一般来说,直接对位进行配置并不
[单片机]
三分钟告诉你:AVR<font color='red'>单片机</font>的熔丝与解锁
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved