本文为大家介绍两个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

}

}

模块化程序设计的.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位锁存器

}

avr单片机动态数码管c语言,AVR单片机8位数码管显示的程序实现(两种方法介绍)...相关推荐

  1. avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机8位数码管显示的程序实现(两种方法介绍)...

    描述 本文为大家介绍两个AVR单片机8位数码管显示的程序实现. AVR单片机595驱动8位数码管的显示的电路实现 主程序代码 #include > #include //GCC中的延时函数头文件 ...

  2. avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机控制8段LED数码管同时显示 - AVR单片机8位数码管显示的程序实现(两种方法介绍)...

    AVR单片机控制8段LED数码管同时显示 这是一个简单的供单片机入门学习者练习用的8段LED数码管控制汇编程序,控制一个两位的数码管同时显示字符(动态刷新).用AVR- Studio-4 开发,在AV ...

  3. C语言中的选择法排序怎么,请问高手们 C语言中选择法排序和冒泡法排序的思想,两种方法有何不同,搞不懂,请举例详细说明一下.谢谢。...

    满意答案 yl6485 2013.04.01 采纳率:48%    等级:12 已帮助:6958人 不同点:冒泡法是顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换: 而选择法, ...

  4. c语言怎么实现模块化vc,原创:在C语言中大概实现VC++中的CArray部分功能的两种方法...

    #ifndef __LISTARRAY_H__ #define __LISTARRAY_H__ #include "rtthread.h" #include "finsh ...

  5. 基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间

    基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间 Proteus仿真 实例代码 #include "at89x52.h" /**74hc595引脚定义 ...

  6. html语言显示动态当前日期和时间,举一反三 浅谈在网页上显示日期的两种方法-网页设计,HTML/CSS...

    在上网的时候,经常会在一些网页上看到当前的日期,如:"今天是×年×月×日星期×"等字样.为了显示系统当前的日期,一般采用脚本语言vbscript或javascript,两种语言有其 ...

  7. 两种方法教你在postman设置请求里带动态token

    postman传递动态参数的最佳实践 问题描述 一.设置全局/环境变量传递 在postman中新增一个环境变量devToken 将获取到的token赋值给devToken 其他请求接口根据需要在请求时 ...

  8. MFC多语言实现的两种方法

    前不久由于工作需要,用新工具Passolo制作软件的英文版,顺便回顾了一下以前一直用的老方法--动态加载英文资源的DLL.今天有空整理了一下,与大家分享两种方法是如何实现软件多语言的. 方法一:动态加 ...

  9. 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )

    文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...

  10. linux c语言乘法口诀,shell 脚本实现乘法口诀表的两种方法——shell与C语言

    shell 脚本实现乘法口诀表的两种方法--shell与C语言 话不多说直接给出代码(执行c语言时没有gcc编译器会报错的哦!): 1 #!/bin/bash 2 if [ $# -eq 0 ] 3 ...

最新文章

  1. 站长新手入门:从0开始搭建微信小程序商城,不会代码也能开商城(附带源码)
  2. python如何在循环中保存文件_python-如何在for循环中更改为另一行文件
  3. matlab system object,通过 System object 实现模块
  4. 为什么移动硬盘的实际容量比标注容量小
  5. 【Can not lock the registry cache file】同一台机器部署多个dubbo应用(配置文件相同)
  6. vim 配置_一步一步配置vim(4)--与latex进行实时显示
  7. Fisher准则一维聚类
  8. 调研助力4S店,解码困境谜团
  9. 机器人正运动学(7)—— 连杆坐标系与DH参数
  10. 中兴机顶盒网关服务器超时,中兴机顶盒错误1302连接EPG服务失败解决方法
  11. 在virtualbox安装xp系统及安装oracle
  12. 计算机术语 gc 是什么意思,gc是什么意思的缩写
  13. python pil image_Python PIL的Image模块
  14. maya cmds 笔记_1
  15. R包ggalluvial绘制冲击图(alluvial diagram)
  16. 金蝶EAS开发 第二弹:了解开发工具与基本使用(下)
  17. 220个绝对离不了的生活窍门(zt)
  18. HCIA-DATACOM-数据通信的基础
  19. COMSOL光学模块/FDTD时域有限差分/ RSoft光电器件设计
  20. 微信屏蔽app下载链接如何解决

热门文章

  1. 基于微信小程序的美容美发技师预约系统设计与实现毕业设计毕设开题报告
  2. pdf如何转换成word文档格式
  3. mui html5 vue,MUI和VUE数据绑定 mui框架入门 (一)
  4. PowerDesigner(数据库建模工具) 使用教程
  5. win10 悬浮日历_win10系统桌面上添加自带日历小工具的设置办法
  6. 可视对讲网络协议转换器怎么使用,协议转换器使用方法详细介绍
  7. 论文泛读: 基于改进退化隐马尔可夫模型的设备健康诊断与寿命预测研究
  8. 建立数据地图,盘活数据资产!
  9. 机器学习(周志华)课后习题
  10. 系统设计:API 接口的最佳实践