1.新建工程,选择芯片型号,这里注意——为了防止出现在插入头文件reg时出现某些引脚不定义的情况
可尝试切换为AT89C52型号的芯片,插入头文件即为reg52,当然,如果使用的是51型号的编译后成功的,也是可以的。
2.实现八位数码管上第三位显示6
首先看原理图,由于是第三位易知对应的是LED6
之后再看
结合两张图可以看到要使得第三位显示为6
LED6对应Y5,Y5对应的二进制为101,要让低电平Y5通电
对应由高位到低位得
P2_4=1;
P2_3=0;
P2_2=1;
之后再考虑排阻P0可得:由P07到P00,abcdefg dp——0111 1101
则有
P0=0x7D; //0111 1101
编译后的效果
注:这里的LED灯亮可能是由于引脚冲突,看数码管显示
3.同理,实现第四位显示6
只需将P2_2=0;修改即可
P2_2=0;
4.还可以采用C语言当中的编写子函数的方式来实现——switch语句
C51子函数:将完成某一种功能的程序代码单独抽取出来形成一个模块,在其它函数中可随时调用此模块,以达到代码的复用和优化程序结构的目的
其形式为:
代码部分:
#include unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Number];//P0=0x7D;
}
void main()
{
Nixie(7,2);//Nixie(2,3);
while(1)
{
}
}
case部分是进行二进制的增加,在此之前还定义了一段数组表示数码管段码表
在主函数中,可以对想要实现对第几位数码管进行修改
实现效果:
第二种方法最大的优点是:使用子函数优化程序结构
关键字:51单片机 静态 数码管显示
引用地址:
51单片机 静态数码管显示
推荐阅读最新更新时间:2024-11-11 04:19
以AT89C51单片机为核心的高频开关电源设计
简介:本系统是多台高频开关电源(1000A/15V)智能模块并联,电源单元和监控单元均以AT89C51单片机为核心,电源单元的均流由监控单元来协调,监控单元既可以与各电源单元通信,也可以与PC通信,实现远程监控。 0 引言 模块化是开关电源的发展趋势,并联运行是电源产品大容量化的一个有效方案,可以通过设计N+l冗余电源系统,实现容量扩展。本系统是多台高频开关电源(1000A/15V)智能模块并联,电源单元和监控单元均以AT89C51单片机为核心,电源单元的均流由监控单元来协调,监控单元既可以与各电源单元通信,也可以与PC通信,实现远程监控。 1 PWM控制电路 TL494是一种性能优良的脉宽调制控制器,TL494由5V基准
[单片机]
51单片机-红外遥控
红外遥控器的发送装置和接收装置以及关于载波等一些原理大家可参看《手把手教你学51单片机》文档第16章知识内容,这里笔者只简单说明如何运用该模块并讲解代码的实现。 1.接收装置 HS0038这个元器件是用来接收红外遥控器发送来的信号做处理的,我们知道红外遥控器有21个按键,按下不同的按键,HS0038的信号引脚就会产生不同的时序,我们解析这些时序就可以判断按下的是什么按键。 比如我们用红外遥控器对准开发板上的接收装置HS0038,按下左上角的按键,那么HS0038的信号引脚就会产生一系列的变化如下: 首先是引导码,也就是一开始HS0038信号引脚会拉低信号线9ms左右的时间,然后是4.5ms的高电平时间,这段时序叫做发送端的
[单片机]
51单片机的软件复位
请先看最下面的程序 这是一款针对Keil软件的,被称作 纯软件 复位的程序。所谓 纯软件 是指它没有直接操作硬件以及寄存器。 事实上如果不懂硬件和汇编也不可能有这段C程序,不管怎么样,我们还是来看一看它的真面目: 我们知道51 单片机 可以把数据放在程序存储器里面,也就是程序和数据没有本质区别,都是一些特定的数据。如果我们将一段程序,以数组数据的形式存储在程序存储器里面,那么是不是也可以执行呢?答案是肯定的。 - 言归正传,先来看看这个数组数据 0xe4,0xc0,0xe0,0xc0,0xe0,0x22,中Keil的汇编窗口看出,它其实是四条汇编语句: CLR A ;编
[单片机]
51单片机之IIC&EEPROM的驱动程序
#include reg52.h #include ./delay/delay.h sbit SCL = P2^0; sbit SDA = P2^1; bit ack = 0; unsigned char flag = 1; #define LCDPORT P0 #define LCD_WRITE_DATA 1 #define LCD_WRITE_COM 0 sbit RS = P2^4; sbit RW = P2^5; sbit E = P2^6; #define SUCC 0 #define ERR 1 void iic_start() { SDA = 1; //先操作SDA,在操作SCL SCL =
[单片机]
利用外部中断和时间中断计数0-999显示在数码管上
要求:数码管从0开始显示,按一次按键(和内部中断,每隔一秒就自然进入中断一次),进入一次中断,数码管上数字加1,直到999,又从0开始。 连线:P10连L7 电位器连直流电机 脉冲输出连P32 CS1连数码管CS #include reg51.h typedef unsigned char uchar; xdata uchar LED_CS _at_ 0x9000; xdata uchar LED_OUTSEG _at_ 0x9004; xdata uchar LED_OUTBIT _at_ 0x9002; sbit P10=P1^0; uchar n=0; unsigned int Count=0; code unsign
[单片机]
学习MCS-51单片机需要哪些软件工具
要想学51单片机,先要进行器件选型! 小白:什么?51单片机不是就一种么,还需要选型? MCU起航:呵呵,自从intel在上世纪八十年代将51单片机的内核转让给各个厂家以后,每个厂家都生产了带有自己特色的51单片机。每种厂家的单片机下载软件都是不太一样的。 小白:那么,我们应该如何选择呢? MCU起航:像winbond厂家生产的89C52单片机,下载的时候需要昂贵的下载器,同时配套他们厂家的软件。美国ATMEL公司和STC公司的芯片下载起来非常简单,对于入门的同学来说,是不错的选择。 小白:少废话,具体有哪些? MCU起航:ATMEL厂家的AT89S52,还有STC公司的STC89C52RC系列
[单片机]
51单片机中断源的扩展方法
一、采用硬件请求和软件查询的方法: 这种方法是:把各个中断源通过硬件“或非(高有效,如CD4002)”(与,低有效)门引入到单片机外部中断源输入端(INT0或INT1),同时再把外部中断源送到单片机的某个输入输出端口,这样当外部中断时,通过“或非”(与)门引起单片机中断,在中断服务程序中再通过软件查询,进而转相应的中断服务程序。 显然,这种方法的中断优先级取决于软件查询的次序。其硬件连接和软件编程如下: Void zhongduan (void) interrupt 0 using 3 //中断函数 { EX0=0;//关中断 If(P0_0=1) { *****}//中断查询 If(P0_1=1) {
[单片机]
51单片机-无源蜂鸣器+LED
1.联系生活 我们已经学会控制无源蜂鸣器鸣叫的时间,那么作为本章最后一讲,联合我们学过的LED章节知识,写一个用开发板实现一个生活常见现象的代码,比如常见机器报警时,灯亮的时候蜂鸣器就响,灯灭的时候就不响,时间上表现为灯亮的时候蜂鸣器马上响,亮的时间和鸣叫的时间都为1秒,然后灯灭与鸣叫停止也持续1秒,循环往复就形成报警信号了。 #include reg52.h sbit BEEP = P1^6; sbit LED2 = P0^0; sbit ADDR2 = P1^2; sbit ADDR1 = P1^1; sbit ADDR0 = P1^0; sbit ENLED = P1^4; sbit ADDR3 = P1^3;
[单片机]