51单片机直接驱动共阴极数码管

发布者:诚信与爱最新更新时间:2015-11-16 来源: eefocus关键字:51单片机  直接驱动  共阴极数码管 手机看文章 扫描二维码
随时随地手机看文章
单片机驱动Led数码管(或n个Led)应该算是单片机经典试验之一了。

数码管种类:

  少量的数码管实际可以直接用单片机驱动(如4个数码管)。数码管数码管有两种:共阴极和共阳极数码管。虽然只是一个极性的不同,实际应用时大有不同(根据网上资料小结如下):

 

数码管类型

上拉电阻

限流电阻

对单片机电流的影响

三极管驱动

工业IC

共阳极

不需

200~470Ω

(非排阻)

位码高电平,

段码低电平时点亮

PNP

 

共阴极

需要

(可排阻1KΩ)

(因而浪费电

而且而且全部

熄灭时比全部

点亮时更费电)

不需

位码低电平,

段码高电平时点亮

NPN

常用

现在手里只有共阴的数码管(LG5011AH),按照网上搜索到的下图实现:

 

[转载]成功C <wbr>DIY <wbr>单片机(2)51单片机直接驱动共阴极数码管

实际用的单片机是AT89S51,参考上面的的图做了适当的修改,用P2控制段,P3控制位。

所有与单片机的连接均用排针。

   参考下图即可方便的在51和2051之间轻松转换:

[转载]成功C <wbr>DIY <wbr>单片机(2)51单片机直接驱动共阴极数码管

   完成的板子如下。与上次比有几处改进:采用USB供电,供电电路加500mA过流保护自恢复保险(USB口旁黄色像瓷片电容),单片机的P0~P3全部用排针引出。当然加了LED数码管、排阻。

[转载]成功C <wbr>DIY <wbr>单片机(2)51单片机直接驱动共阴极数码管

 

[转载]成功C <wbr>DIY <wbr>单片机(2)51单片机直接驱动共阴极数码管

LED驱动的段显控制:

[转载]成功C <wbr>DIY <wbr>单片机(2)51单片机直接驱动共阴极数码管

[转载]成功C <wbr>DIY <wbr>单片机(2)51单片机直接驱动共阴极数码管

首先确定显示的段,将段按顺序转换成二进制数字,进而转换成十进制数字。

假设P2.0~P2.6按顺序接到a-h段

 

单片机

Pn.7

Pn.6

Pn.5

Pn.4

Pn.3

Pn.2

Pn.1

Pn.0

数码管

h

g

f

e

d

c

b

a

如显示“H”

0

1

1

1

0

1

1

0

B01110110= 0x76

如显示“O”

0

0

1

1

1

1

1

1

B00111111= 0x3f

 [page]

程序(C语言)


//这是采用查询方式的,比较占CUP资源,

# include
typedef unsigned char uchar;
//这里定义了所有二进制--十六进制转换
#define B00000000 0x0
#define B00000001 0x1
#define B00000010 0x2
#define B00000011 0x3
#define B00000100 0x4
#define B00000101 0x5
#define B00000110 0x6
#define B00000111 0x7
#define B00001000 0x8
#define B00001001 0x9
#define B00001010 0xa
#define B00001011 0xB
#define B00001100 0xc
#define B00001101 0xd
#define B00001110 0xe
#define B00001111 0xf

#define B00010000 0x10
#define B00010001 0x11
#define B00010010 0x12
#define B00010011 0x13
#define B00010100 0x14
#define B00010101 0x15
#define B00010110 0x16
#define B00010111 0x17
#define B00011000 0x18
#define B00011001 0x19
#define B00011010 0x1a
#define B00011011 0x1B
#define B00011100 0x1c
#define B00011101 0x1d
#define B00011110 0x1e
#define B00011111 0x1f

#define B00100000 0x20
#define B00100001 0x21
#define B00100010 0x22
#define B00100011 0x23
#define B00100100 0x24
#define B00100101 0x25
#define B00100110 0x26
#define B00100111 0x27
#define B00101000 0x28
#define B00101001 0x29
#define B00101010 0x2a
#define B00101011 0x2B
#define B00101100 0x2c
#define B00101101 0x2d
#define B00101110 0x2e
#define B00101111 0x2f

#define B00110000 0x30
#define B00110001 0x31
#define B00110010 0x32
#define B00110011 0x33
#define B00110100 0x34
#define B00110101 0x35
#define B00110110 0x36
#define B00110111 0x37
#define B00111000 0x38
#define B00111001 0x39
#define B00111010 0x3a
#define B00111011 0x3B
#define B00111100 0x3c
#define B00111101 0x3d
#define B00111110 0x3e
#define B00111111 0x3f

#define B01000000 0x40
#define B01000001 0x41
#define B01000010 0x42
#define B01000011 0x43
#define B01000100 0x44
#define B01000101 0x45
#define B01000110 0x46
#define B01000111 0x47
#define B01001000 0x48
#define B01001001 0x49
#define B01001010 0x4a
#define B01001011 0x4B
#define B01001100 0x4c
#define B01001101 0x4d
#define B01001110 0x4e
#define B01001111 0x4f

#define B01010000 0x50
#define B01010001 0x51
#define B01010010 0x52
#define B01010011 0x53
#define B01010100 0x54
#define B01010101 0x55
#define B01010110 0x56
#define B01010111 0x57
#define B01011000 0x58
#define B01011001 0x59
#define B01011010 0x5a
#define B01011011 0x5B
#define B01011100 0x5c
#define B01011101 0x5d
#define B01011110 0x5e
#define B01011111 0x5f

#define B01100000 0x60
#define B01100001 0x61
#define B01100010 0x62
#define B01100011 0x63
#define B01100100 0x64
#define B01100101 0x65
#define B01100110 0x66
#define B01100111 0x67
#define B01101000 0x68
#define B01101001 0x69
#define B01101010 0x6a
#define B01101011 0x6B
#define B01101100 0x6c
#define B01101101 0x6d
#define B01101110 0x6e
#define B01101111 0x6f

#define B01110000 0x70
#define B01110001 0x71
#define B01110010 0x72
#define B01110011 0x73
#define B01110100 0x74
#define B01110101 0x75
#define B01110110 0x76
#define B01110111 0x77
#define B01111000 0x78
#define B01111001 0x79
#define B01111010 0x7a
#define B01111011 0x7B
#define B01111100 0x7c
#define B01111101 0x7d
#define B01111110 0x7e
#define B01111111 0x7f

#define B10000000 0x80
#define B10000001 0x81
#define B10000010 0x82
#define B10000011 0x83
#define B10000100 0x84
#define B10000101 0x85
#define B10000110 0x86
#define B10000111 0x87
#define B10001000 0x88
#define B10001001 0x89
#define B10001010 0x8a
#define B10001011 0x8B
#define B10001100 0x8c
#define B10001101 0x8d
#define B10001110 0x8e
#define B10001111 0x8f

#define B10010000 0x90
#define B10010001 0x91
#define B10010010 0x92
#define B10010011 0x93
#define B10010100 0x94
#define B10010101 0x95
#define B10010110 0x96
#define B10010111 0x97
#define B10011000 0x98
#define B10011001 0x99
#define B10011010 0x9a
#define B10011011 0x9B
#define B10011100 0x9c
#define B10011101 0x9d
#define B10011110 0x9e
#define B10011111 0x9f

#define B10100000 0xa0
#define B10100001 0xa1
#define B10100010 0xa2
#define B10100011 0xa3
#define B10100100 0xa4
#define B10100101 0xa5
#define B10100110 0xa6
#define B10100111 0xa7
#define B10101000 0xa8
#define B10101001 0xa9
#define B10101010 0xaa
#define B10101011 0xaB
#define B10101100 0xac
#define B10101101 0xad
#define B10101110 0xae
#define B10101111 0xaf

#define B10110000 0xB0
#define B10110001 0xB1
#define B10110010 0xB2
#define B10110011 0xB3
#define B10110100 0xB4
#define B10110101 0xB5
#define B10110110 0xB6
#define B10110111 0xB7
#define B10111000 0xB8
#define B10111001 0xB9
#define B10111010 0xBa
#define B10111011 0xBb
#define B10111100 0xBc
#define B10111101 0xBd
#define B10111110 0xBe
#define B10111111 0xBf

#define B11000000 0xc0
#define B11000001 0xc1
#define B11000010 0xc2
#define B11000011 0xc3
#define B11000100 0xc4
#define B11000101 0xc5
#define B11000110 0xc6
#define B11000111 0xc7
#define B11001000 0xc8
#define B11001001 0xc9
#define B11001010 0xca
#define B11001011 0xcB
#define B11001100 0xcc
#define B11001101 0xcd
#define B11001110 0xce
#define B11001111 0xcf

#define B11010000 0xd0
#define B11010001 0xd1
#define B11010010 0xd2
#define B11010011 0xd3
#define B11010100 0xd4
#define B11010101 0xd5
#define B11010110 0xd6
#define B11010111 0xd7
#define B11011000 0xd8
#define B11011001 0xd9
#define B11011010 0xda
#define B11011011 0xdB
#define B11011100 0xdc
#define B11011101 0xdd
#define B11011110 0xde
#define B11011111 0xdf

#define B11100000 0xe0
#define B11100001 0xe1
#define B11100010 0xe2
#define B11100011 0xe3
#define B11100100 0xe4
#define B11100101 0xe5
#define B11100110 0xe6
#define B11100111 0xe7
#define B11101000 0xe8
#define B11101001 0xe9
#define B11101010 0xea
#define B11101011 0xeB
#define B11101100 0xec
#define B11101101 0xed
#define B11101110 0xee
#define B11101111 0xef

#define B11110000 0xf0
#define B11110001 0xf1
#define B11110010 0xf2
#define B11110011 0xf3
#define B11110100 0xf4
#define B11110101 0xf5
#define B11110110 0xf6
#define B11110111 0xf7
#define B11111000 0xf8
#define B11111001 0xf9
#define B11111010 0xfa
#define B11111011 0xfB
#define B11111100 0xfc
#define B11111101 0xfd
#define B11111110 0xfe
#define B11111111 0xff


uchar code helloB[] ={B01110110,B01111001,B00111000,B00111111};    //HELLO

const unsigned char LED7Code[]={
 0x3F,  // 0
 0x06,  // 1
 0x5B,  // 2
 0x4F,  // 3
 0x66,  // 4
 0x6D,  // 5
 0x7D,  // 6
 0x07,  // 7
 0x7F,  // 8
 0x6F,  // 9
 0x77,  // A
 0x7C,  // B
 0x39,  // C
 0x5E,  // D
 0x79,  // E
 0x71  // F
 
};
 [page]
void delay(int n);
void display0_F();
void displayHELLO();
//
void main(void)
{
   
    P2=0xff;   //先将段码关闭
    P3=0xff;   //将位码关闭
    delay(20);//等待一会
 
    while(1)
  {
   displayHELLO();
   display0_F();
  }
}

void delay(int n)    // 0.01*n 秒
{
    int j;
    uchar k;
    for(j=0;j   {
    for(k=255;k>0;k--);
  }
}
void display0_F()    //显示全8和0~F
{
uchar i,j,m;
for (m=100;m>0;m--)  
  {
   for(i=0;i<=3;i++)
   {
     P2=0x00;
     P3=~(0x01<      P2=0xff; //输出段码到P2口
     
     delay(5);
   }
  
    }
 
 for(j=0;j<16;j++){
    for (m=30;m>0;m--)   //显示30次约0.3秒
  {
   for(i=0;i<=3;i++)
   {
     P2=0x00;
     P3=~(0x01<      if((i+j)<16)
       P2=LED7Code[i+j];    //输出段码到P2口
     else
       P2=0;
     
     delay(5);
   }
  
    }

 
    P2=0xff;     //关闭段码
    P3=0xff;     //关闭位码
    delay(5);   //等待0.3秒
   


}
void displayHELLO()    //显示HELO
{
   uchar i,m;
   for (m=200;m>0;m--)  
  {
   for(i=0;i<=3;i++)
   {
     P2=0x00;
     P3=~(0x01<      P2=helloB[i]; //输出段码到P2口      
     delay(5);
   }
  
    }
}

 

 

关键字:51单片机  直接驱动  共阴极数码管 引用地址:51单片机直接驱动共阴极数码管

上一篇:Cepark 51基于RTX-51 tiny的花样流水灯
下一篇:ISP在线下载线的最小系统

推荐阅读最新更新时间:2024-03-16 14:39

51单片机,18B20,1602温度计+串口通信
制作出来的实物图如下: 仿真原理图如下(proteus仿真工程文件可到本帖附件中下载) 上位机: 安装程序解压到同一目录下。再运行setup安装。。。。 温度计.exe 编写环境Win10 x64. VS2010 x86 C++ MFC 测试环境Win10 x64. 在32位系统上,能不能正常使用还不清楚。 所以公布了源代码文件,如果在32位系统上,不能正常使用。 请使用源代码文件,在32位系统上重新生成一下应用程序。。。 单片机源程序如下: #include reg52.h #include math.h bit flag1s = 0, _up = 0;
[单片机]
<font color='red'>51单片机</font>,18B20,1602温度计+串口通信
c51单片机浮点数及其汇编程序设计
在 单片机 应用系统的数据处理过程中,经常会遇到小数的运算问题,如求解BCD的增量算式、线性化处理等。因此,需要用二进制数来表示小数。表示小数的方法一般有两种,定点数和浮点数。定点数结构简单,与整数的运算过程相同,运算速度快。但随着所表示数的范围的扩大,其位数成倍增加,给运算和存储带来不便,而且也不能保证相对精度不变。浮点数的结构相对复杂,但它能够以固定的字节长度保持相对精度不变,用较少的字节表示很大的数的范围,便于存储和运算,在处理的数据范围较大和要求精度较高时,采用浮点数。 浮点数的概念 常用的科学计数法来表示一个十进制数如 l234.75=1.23475E3=1.23475 103 在数据很大或很小时,采用科学计数避免了
[单片机]
51单片机入门之静态数码管
LED数码管是单片机外围接口设备中常用的显示设备,有七段管和米字管两种,实验室中常用的是七段管。其工作方式有两种:共阴极和共阳极。所谓共阴极是把LED的com端都接地,而共阳极就是把com端都接高电平。其驱动显示方式也有两种:静态显示和动态显示。 静态显示中每个数码管占用单片机的一个八位口I/O口,工作时点亮的段常亮。于该种方式而言,硬件电路简单,编程简单,但是浪费单片机的I/O口。下面简单演示一下该种驱动方式。 P2口接一个数码管,数码管显示的数字每秒钟自动加一,加到9后清0,一直循环,本实验中数码管采用共阴极接法。 实验原理图如下: 实验程序如下: view plain copy #include #def
[单片机]
<font color='red'>51单片机</font>入门之静态<font color='red'>数码管</font>
基于51单片机的交通灯控制程序
每个街口有左拐、直行及行人三种指示灯。直行灯每个灯有红、黄、绿三种颜色。自行车与汽车共用左拐和直行灯。 首先东西向直行绿灯和行人灯亮1分钟,左转灯亮30秒,黄灯亮5秒(同时南北向红灯亮95秒),然后东西向红灯亮95秒钟(同时首先南北向直行绿灯和行人灯亮1分钟,左转灯亮30秒,黄灯亮5秒),然后东西向的绿灯亮,依次类推。 每次绿灯亮的时候,对应的行人灯亮。 60S/30S/5S/60S/30S/5S 东西道 绿和行人/左转/黄/红/红/红 南北道 红/红/红/绿和行人/左转/黄 行人灯亮的时候有声音提示盲人能通过。 突发交通事故的时候能够紧急全红灯。 在有重要人物通过的时候能手动改为绿灯。 ORG 0000H ;主程序的入口地址
[单片机]
51单片机流水灯电路以及C代码
流水灯是51单片机的入门级实验,以下是其电路图以及C代码 流水灯proteus电路图 此图发光二极管采用 共阳极式连接 流水灯C代码 #include reg51.h #define TIME 1 //宏定义秒数,方便更改间隔时间 void delaySec(unsigned char n); void Movinglight(); unsigned char code MovinglightArray = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char i,n = 1; int main() { Movinglight(); return 0;
[单片机]
<font color='red'>51单片机</font>流水灯电路以及C代码
基于51单片机设计N字节十六进制除法
1、思路 借用十进制除法竖式计算的思路,作十六进制的除法竖式计算。 将除数3字节与被除数高3字节对齐,除完后保存当前字节的商和余数,将被除数往低顺延一个字节,再执行新一轮的除法。被除数有6字节,除数有3字节,故除法需执行4轮。这是最外层的循环。 每一轮的除法可转换为多次减法,需要注意的是,对被除数来说减法需要一直执行到最高字节,以保证借位执行无误。这是中间层的循环。 每一轮的减法由单个字节的减法循环组成,减的过程中考虑借位。由于除数只有3个字节,执行完此3次减法后,除数再往上的字节内容为00H,减法就变成了XXH-CY-00H,即纯粹的借位。 为了判断中间层循环什么时候结束,需要额外写一个子程序来比较减数与被减数的
[单片机]
基于<font color='red'>51单片机</font>设计N字节十六进制除法
基于GPRS的51单片机固件升级系统设计
引言 嵌入式技术的迅速发展使得越来越多的嵌入式终端设备应用在人们的日常生活中,其中不乏应用在一些偏远地方,甚至工作在无人看管的场合下。人口比较稀少的地方,由于基站分布比较分散,加之人口比较稀疏,基站维护等操作常难以执行,这就需要在某些地方放置网络信号测试仪检测该地区的通信信号质量,并将该信息反馈到远程服务器。同时,由于硬件系统程序设计固有的局限性,固件程序的升级在所难免。针对实际情况,本文开发了网络信号测试仪的单片机远程升级系统。 1 系统硬件设计 整个系统以Silicon Labs公司推出的混合信号片上系统型单片机C8051F340作为核心控制单元,采用GSM/GPRS/EDGE无线模块MC75作为与远程服务器的通信模
[单片机]
基于GPRS的<font color='red'>51单片机</font>固件升级系统设计
51单片机-代码文件和测试
创建好“infrared.c”和“infrared.h”文件。 1.infrared.c的代码 #include reg52.h #include infrared.h unsigned char irflag = 0; //红外接收标志,收到一帧正确数据后置1 unsigned char ircode ; //红外代码接收缓冲区 /* 初始化红外接收功能 */ void InitInfrared() { IR_INPUT = 1; //确保红外接收引脚被释放 TMOD &= 0x0F; //清零T1的控制位 TMOD |= 0x10; //配置T1为模式1 TR1 = 0; //停止T
[单片机]
<font color='red'>51单片机</font>-代码文件和测试
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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