C51数码管显示相关问题总结

发布者:GoldenSunrise最新更新时间:2021-11-25 来源: eefocus关键字:C51  数码管显示  静态显示 手机看文章 扫描二维码
随时随地手机看文章

1.单个数码管的静态显示


/*--------------------------

功能:一个数码管的静态显示

Author: Zhang Kaizhou

Date: 2019-5-16 21:18:17

--------------------------*/

#include


sbit duan_address = P2^6; // 定义段地址为位寻址类型的变量

sbit wei_address = P2^7; // 定义位地址为位寻址类型的变量


void main()

{

wei_address = 1; // 打开位锁存器

P0 = 0xfe; // 输出数码管所在的位置

wei_address = 0; // 关闭位锁存器

duan_address = 1; // 打开段锁存器

P0 = 0x7d; // 输出共阴极数码管的段码(6)

duan_address = 0; // 关闭段锁存器

while(1);

}


2.数码管的动态循环显示


/*-----------------------------------

功能:在数码管上循环显示0~F 16个字符

Author: Zhang Kaizhou

Date: 2019-5-16 21:41:50

-----------------------------------*/

#include

#define uchar unsigned  char

#define uint unsigned int


sbit wei_address = P2^7; // 定义可位寻址类型的变量wei_address

sbit duan_address = P2^6; // 定义可位寻址的变量daun_address

uchar num; // 定义无符号字符变量num

uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f,

  0x66, 0x6d, 0x7d, 0x07,

  0x7f, 0x6f, 0x77, 0x7c,

  0x39, 0x5e, 0x79, 0x71}; // 定义一个无符号字符型数组table[]用于存放共阴极数码管(0~F字符)段码,存放在单片机内部的ROM或Flash中


void delay(uint xms);

void main()

{

wei_address = 1; // 开位锁存器

P0 = 0x00; // 选择要显示的数码管

wei_address = 0; // 关锁存器

while(1)

{

for(num = 0; num < 16; num++) // 在数码管上循环显示0~F字符

{

duan_address = 1; // 开数码管的段锁存器

P0 = table[num]; // 输出段码

duan_address = 0; // 关段锁存器

delay(1000); // 延时1000ms = 1s

}

}

}


void delay(uint xms)

{

uint i, j;

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

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

}


3.多个数码管的动态扫描显示


/*-----------------------------------

功能:在4个数码管上动态显示字符信息

Author: Zhang Kaizhou

Date: 2019-5-16 21:41:50

-----------------------------------*/

#include

#define uchar unsigned  char

#define uint unsigned int


sbit wei_address = P2^7; // 定义可位寻址类型的变量wei_address

sbit duan_address = P2^6; // 定义可位寻址的变量daun_address

uchar num; // 定义无符号字符变量num

uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f,

  0x66, 0x6d, 0x7d, 0x07,

  0x7f, 0x6f, 0x77, 0x7c,

  0x39, 0x5e, 0x79, 0x71}; // 定义一个无符号字符型数组table[],存放在单片机内部的ROM或Flash中


void delay(uint xms);

void main()

{

while(1)

{

// 显示0

duan_address = 1;

P0 = table[0];

duan_address = 0;

wei_address = 1;

P0 = 0xfe;

wei_address = 0;

delay(5);

// 显示1

duan_address = 1;

P0 = table[1];

duan_address = 0;

P0 = 0xff; // 消影

wei_address = 1;

P0 = 0xfd;

wei_address = 0;

delay(5);

// 显示2

duan_address = 1;

P0 = table[2];

duan_address = 0;

P0 = 0xff; // 消影

wei_address = 1;

P0 = 0xfb;

wei_address = 0;

delay(5);

// 显示3

duan_address = 1;

P0 = table[3];

duan_address = 0;

P0 = 0xff; // 消影

wei_address = 1;

P0 = 0xf7;

wei_address = 0;

delay(5);

}

}


void delay(uint xms)

{

uint i, j;

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

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

}

关键字:C51  数码管显示  静态显示 引用地址:C51数码管显示相关问题总结

上一篇:51单片机内部定时器使用
下一篇:LCD1602动态显示

推荐阅读最新更新时间:2024-11-02 00:04

Keil C51静态库的生成与使用
1、将要生成库文件的代码新建一个工程,比如LibExample,然后把代码加到其中,在Option for target中的Output里选择Create Library,编译通过生成库文件。如下2图 2、将生成的库文件(LibExample.lib)拷贝到新项目(Hello)文件夹中,添加到工程文件中,并包含库文件的.h文件(LibExample.h),这样在新项目中即可调用,如下2图 库文件还是可以反编译成汇编,这点对单片机来说是个坏消息,呵呵,要防止轻易被破解的话用C语言写大量的冗余代码或者其他防反汇编代码倒是不错。
[单片机]
Keil <font color='red'>C51</font>中<font color='red'>静态</font>库的生成与使用
Keil C51中对双数据指针的支持情况分析
在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据指针可以改善同时有两个16位指针使用时的性能。作为一种增强特性,有许多8051派生型器件支持双数据指针。以宏晶科技STC89系列的产品为例,DPTR被增强为DPTR0和DPTR1两个,仍然使用原来的地址,用另外一个SFR AUXR1的0位DPS来切换。当DPS位为0时,所有对DPTR的操作使用DPTR0;当DPS位为1时,所有对DPTR的操作使用DPTR1。这样,通过一个简单的INC AUXR1指令,就可以来回切换两个数据指针。 1 Keil C51对双数据指针的支持情况 作
[单片机]
Keil <font color='red'>C51</font>中对双数据指针的支持情况分析
【自学51单片机】6 ---数码管动态显示、中断系统介绍
1、数码管的动态显示 1.1 动态显示基本原理 静态显示:通过三八译码器控制一个数码管显示数值。 动态显示:又称动态扫描,通过轮流点亮数码管(一个时刻只有一个点亮),利用人眼视觉的余晖效应,让人看数码管看起来全部点亮。 如何实现动态显示? 把数码管的整体扫描时间(整体扫描时间 =单个数码管点亮时间*数码管个数)限定在10ms以内即可。当刷新频率大于100HZ,即刷新时间小于10ms,就可做到无闪烁。设计程序时选一个接近10ms,又比较规整的值就可。 1.2 数码管动态显示秒表(0~999999) 程序流程图 程序 #include reg52.h sbit ADDR0 = P1^0; sbit ADDR1 = P1
[单片机]
【自学51单片机】6 ---<font color='red'>数码管</font>动态<font color='red'>显示</font>、中断系统介绍
c51单片机 独立按键
用独立按键实现按一个按键时,数字从F到0递减的变化程序,即每按一次按键,数码管显示字符减一,减到0后重新显示。 #include reg52.h sbit ADDR0= P2^2; sbit ADDR1=P2^3; sbit ADDR2=P2^4; sbit key1=P3^0; unsigned char code ledchar = {0x00,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; bit keysta = 1; void main() { bit backup = 1;
[单片机]
51单片机矩阵键盘检测源代码(按键数码管显示0-F)
本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52;找到相应部分即可.这是一整个单片机开发板的电路图其他的忽略. hex文件及其工程文件下载:http://www.51hei.com/f/juzhen.rar 以下是通过测试的源代码: /* *功能:使用矩阵按键使得按键按下时数码管上显示各自对应的数字(0 ~ F); *日期:2013-05-03-17:51; *作者:徐冉 *特别说明:本程序代码已经通过调试,仅供学习使用; * */ /***********AT89C52-RC 单片机51hei 实验板***********/ /*****************51hei-开发板****************
[单片机]
谈谈Keil 中C51的内存分配与优化
看到这篇C51的内存分配和优化的文章,个人觉得分析的十分到位,在这里转给大家 C51的内存分配不同于一般的PC,内存空间有限,采用覆盖和共享技术。在Keil编译器中,经过编译后,会形成一个M51文件,在其内部可以详细的看到内存的分配情况。 C51内存常见的两个误区: (1) 变量超过128字节后必须用COMPACT模式。 其实,只要不超过256字节,都可以用SMALL模式 (2) 内部RAM,128字节以上的是SFR用,不给程序用。 其实,由于C51寻址的不同,高128字节也可以用来存储变量,虽与SFR地址相同,但寻址的方式不同。 下面通过几个程序来看内存的分配。 *************************
[单片机]
MSP430F149流水灯闪烁以及数码管显示
今天下午写了一个流水灯闪烁的实验,总的来说,不难,因为这块板子集合的电路图没有上一块那么复杂,所以总的来说,还是比较顺手,开始的时候,出现流水灯没有流转的现象,原来是没有加入延时函数,后来经过调整,结果很快就出来了 电路示意图: 示例代码: #include msp430x14x.h #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(doubl
[单片机]
MSP430F149流水灯闪烁以及<font color='red'>数码管</font>的<font color='red'>显示</font>
PID调节C51程序(2)
这是从网上找来的一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。 =========================================================================================
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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