历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2020年01月09日 | AVR单片机8位数码管显示的程序实现(两种方法介绍)

2020-01-09 来源:elecfans

本文为大家介绍两个AVR单片机8位数码管显示的程序实现。

AVR单片机595驱动8位数码管的显示的电路实现

主程序代码

#include >

#include //GCC中的延时函数头文件

#include “hc595.h”

//unsigned char Led_Disbuf[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //共阴极

unsigned char Led_Disbuf[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共阳极

unsigned char ComBuf[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//函数声明

extern void Delayus(unsigned int lus); //us延时函数

extern void Delayms(unsigned int lms); //ms延时函数

int main(void) //GCC中main文件必须为返回整形值的函数,没有参数

{

unsigned char i;

PORTB = 0xff; //PORTB输出低电平,使LED熄灭

DDRB = 0xFF; //配置端口PB全部为输出口

HC595_port_init();

while(1)

{

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

{

PORTB = Led_Disbuf; //送段码

HC595_Send_Data(ComBuf); //选通位选端口

Delayus(70); //延时

HC595_Send_Data(0x00); //位选通关闭

}

}

}

//us级别的延时函数

void Delayus(unsigned int lus)

{

while(lus--)

{

_delay_loop_2(4); //_delay_loop_2(1)是延时4个时钟周期,参数为4则延时16

//个时钟周期,本实验用16M晶体,则16个时钟周期为16/16=1us

}

}

//ms级别的延时函数

void Delayms(unsigned int lms)

{

while(lms--)

{

Delayus(1000); //延时1ms

}

}

AVR单片机8位数码管显示的程序实现(两种方法介绍)

模块化程序设计的.h文件

下面是本实例中模块化程序设计的.h文件

/*****************************

74hc595.h

***********************************/

/*74hc595与单片机的引脚连接

/MR(10脚) VCC 低点平时将移位寄存器的数据清零。通常将它接Vcc

/OE(13脚) PG4 高电平时禁止输出(高阻态)。

如果单片机的引脚不紧张,用一个引脚控制它,

可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。

ST_CP(12脚) PG1 上升沿时移位寄存器的数据进入数据存储寄存器,

下降沿时存储寄存器数据不变。通常将RCK置为低电平,

当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。

通常都选微秒级),更新显示数据。

SH_CP(11脚) PG0 上升沿时数据寄存器的数据移位。QA-->QB-->QC-->。。。-->QH;

下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。

通常都选微秒级)

DS(14) PG2 串行数据输入端。

*/

#ifndef __HC595_H__

#define __HC595_H__

#include //io端口寄存器配置文件,必须包含

#include //GCC中的延时函数头文件

#define HC595_latch (1 << PG1) //上升沿数据打入8位锁存器,下降沿锁存器数据不变

#define HC595_sclk (1 << PG0) //上升沿数据移位,下降沿数据不变

#define HC595_oe (1 << PG4) //低电平,8位数据锁存器输出,高电平输出高组态

#define HC595_data (1 << PG2) //串行数据输入端

#define SET_HC595_latch (PORTG |= (1 << PG1))

#define CLR_HC595_latch (PORTG &= ~(1 << PG1))

#define SET_HC595_sclk (PORTG |= (1 << PG0))

#define CLR_HC595_sclk (PORTG &= ~(1 << PG0))

#define SET_HC595_data (PORTG |= (1 << PG2))

#define CLR_HC595_data (PORTG &= ~(1 << PG2))

#define SET_HC595_oe (PORTG |= (1 << PG4))

#define CLR_HC595_oe (PORTG &= ~(1 << PG4))

void HC595_port_init(void); //595端口初始化

void HC595_Send_Data(unsigned char byte); //发送一个字节

void HC595_Output_Data(unsigned char data); //发送字符串

#endif

同时我们将与74HC595相关的函数定义部分放在74HC595.c文件中,如下

/********************************

74hc595.c

**************************************/

#include “hc595.h”

//595端口初始化

void HC595_port_init(void)

{

PORTG = 0x00;

DDRG |= (1 << PG0) | (1 << PG1) | (1 << PG2) | (1 << PG4);

}

//发送一个字节

void HC595_Send_Data(unsigned char byte)

{

unsigned char i;

//CLR_HC595_latch;

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

{

if(byte & 0x80)

{

SET_HC595_data;

}

else

{

CLR_HC595_data;

}

byte <<=1;

SET_HC595_sclk; //上升沿数据移位

CLR_HC595_sclk;

}

SET_HC595_latch;

CLR_HC595_latch;

}

//发送字符串

void HC595_Output_Data(unsigned char data)

{

CLR_HC595_latch; //下降沿锁存器数据不变

HC595_Send_Data(data);

SET_HC595_latch; //上升沿数据打入8位锁存器

}

推荐阅读

史海拾趣

ATO SOLUTION公司的发展小趣事

在电子行业的激烈竞争中,ATO SOLUTION公司通过一项创新性的技术突破,成功引领了市场的新潮流。该公司研发出了一款高效能的半导体芯片,极大地提升了电子设备的性能和能效比。这一技术的问世,迅速获得了行业内外的广泛关注和认可,为公司赢得了大量合作伙伴和客户,奠定了市场领先地位。

南京绿芯(Grenergy)公司的发展小趣事

在电子行业的激烈竞争中,ATO SOLUTION公司通过一项创新性的技术突破,成功引领了市场的新潮流。该公司研发出了一款高效能的半导体芯片,极大地提升了电子设备的性能和能效比。这一技术的问世,迅速获得了行业内外的广泛关注和认可,为公司赢得了大量合作伙伴和客户,奠定了市场领先地位。

GC Electronics公司的发展小趣事
按照电路图将传感器、报警装置和电源等部件连接起来,确保电路连接正确无误。
FILTRONETICS Inc公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,FILTRONETICS深知技术创新的重要性。公司加大了对研发的投入力度,成立了专门的研发部门和技术中心,致力于新技术、新材料和新工艺的研发和应用。同时,公司还积极关注环保和可持续发展问题,致力于生产绿色、环保的电子产品。通过不断的技术创新和可持续发展实践,FILTRONETICS不仅保持了技术领先地位,也为社会的可持续发展做出了贡献。

Gwconnect (Molex)公司的发展小趣事
使用分立元件构成电路,相比集成电路成本更低。
Bals Elektrotechnik GmbH & Co KG公司的发展小趣事

1958年,Bals Elektrotechnik公司迎来了一个重大突破——连接器开始批量生产。随着技术的不断进步,公司逐渐将材料从铝转向塑料,这不仅降低了生产成本,还提高了产品的性能和可靠性。这一创新举措使得Bals在电气连接器市场上占据了重要地位,为后续的发展奠定了坚实基础。

问答坊 | AI 解惑

楼宇对讲系统

楼宇对讲系统是一种用于高层住宅、公寓大厦内外,户间信息传递,防盗门控制和在紧急情况下住户向楼宇值班室报警的设备。它以功能齐全、性能可靠、其容量大、造型美观、安装使用方便而深受广大用户欢迎,并且也在安全生活小区中得到了广泛的应用。 ...…

查看全部问答>

nrf24l01模块进行通信实验的时候,自动应答不成功。。。

我用NRF24L01模块通信,配置的PIPE0自动应答。为什么实验的时候只有非常小的概率收到自动应答信号(几乎为零),接收端可以完整收到数据包。而且发送接收两个模块想离很近,频带式2.48G。。。哪位大虾可以指点一下。。是不是模块本身的问题。??…

查看全部问答>

200元做个实物,对高手来说毫无难道,呵呵

我做的是球赛计时计分器,要求如下: 本系统通过单片机AT89C51芯片来控制LED七段数码管和矩阵作时间、分数、队名称显示的球赛计时计分系统。本系统具有赛程定时设置、赛程时间暂停、球赛种类的切换、及时刷新甲、乙队双方的成绩以及赛后成绩暂存等 ...…

查看全部问答>

为什么BYD电动出租车在深圳暂无下文?

可喜的是没有出现技术事故的报道。按正常计划,下一批过百数量的同类出租车也将在近期推出市场,但除了听到国家和深圳市政府对电动汽车和混合动力汽车的补贴(5万+3万)的消息外,并没能听到深圳哪家的士出租车公司宣布会增加电动出租车的投放量。 ...…

查看全部问答>

问个open设备的小问题~~~~

我退出一个程序 ,退出之前,open的设备没有正常close,退出以后这个设备会正常关闭吗? 如果我想我的程序只要open一次,就会永远起效,直到arm关机,应该怎么做?? ioctl()控制对应的驱动吗??…

查看全部问答>

$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\LayoutManager.lib \这个是什么意思 ?

$(_COMMONOAKROOT)\\lib\\$(_CPUINDPATH)\\LayoutManager.lib \\这个路径在sources文件中用到了 对应的实际路径是C:\\WINCE600\\PUBLIC\\COMMON\\OAK\\LIB\\ARMV4I\\RETAIL。也就是说 $(_COMMONOAKROOT)对应C:\\WINCE600\\PUBLIC\\COMMON\\OAK\\ ...…

查看全部问答>

如何在控制面板加上一个背光控制的高级选项?

ADVBACKLIGHT,这个文件源代码是用在控制面板里的,请问怎么样可以使控制面板的背光设置里有一个高级选项?因为默认是没有的!…

查看全部问答>

简单winCE例程开发,有偿。有愿意做的朋友进

本人现需几个winCE的示例程序,要求EVC4.0开发,内容涉及绘图、文字显示、串口通讯以及打印几个方面,运行环境WinCE,CPU ARM4/ARM41。 若有掌握相关技术的朋友感兴趣,请加QQ:575336,工作日白天9:00-17:00在线。 开发周期及费用详谈。…

查看全部问答>

哪位大虾有比较好的KEIL或C51的视频教程呀?

哪位大虾有比较好的KEIL,C51视频教程呀,请把网址告诉小弟。万分感激。。。。 帮小弟顶下也有分噢!!…

查看全部问答>

我是该版块的新人,有几个基础的问题想请各位前辈指点指点,顶者有分

我的基本情况 1> 对 Visual studio 2003/2005 中vb.net c#.net 相对熟悉    (因为开发过.Net 的项目所以数据也还算熟悉) 2> 熟悉 JSDK2.0 DOS下的java 开发, 也用JBuilder 8.0以下版本开发一些东西,因此对JAVA 算是有一定的基础 ...…

查看全部问答>