历史上的今天
今天是:2024年11月12日(星期二)
2019年11月12日 | 8位共阳数码管74HC595芯片AVR单片机控制 proteus仿真及源码
2019-11-12 来源:51hei
刚入门AVR单片机一段时间,感觉资料很少,所以进度很慢,刚才百度到这里来,现上传一个数码管的程序来和大家分享,高手就跳过吧,初学可以下载来做参考
proteus仿真原理图:
单片机源程序:
/*
* smg8_avr.h
*
* Created: 2017/3/16 1:54:20
* Author: lyl
*/
#ifndef SMG8_AVR_H_
#define SMG8_AVR_H_
#include "lyl_avr.h"
//数码管端口定义
#define smgPORT PORTA
#define smgPORT_DDR DDRA
#define DS PA5//串行数据输入端口
#define SHCP PA6//为移位寄存器的时钟脉冲输入口
#define STCP PA7//为存储寄存器的时钟脉冲输入口
//OE为输出使能端口,低电平有效,已直接接地
void smgPortInit(void);//数码管端口初始化
void smg74HC595_WriteByte(uchar ucData); //向74HC595发送一个数据
void smgDisplay(uchar bitCode,uchar segCode,uchar dp); //在数码管的某一位上显示某一个字符
//共阳数码管的编码,并将数据定义在CODE区
const uchar SMG_SEG_CODE[18]={//共阳数码管的段码编码,并将数据定义在CODE区
0xc0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
0x88,/*A=10*/
0x83,/*b=11*/
0xC6,/*C=12*/
0xA1,/*d=13*/
0x86,/*E=14*/
0x8E,/*F=15*/
0xFF,/*不显示=16*/
0xBF,/*横杆“-”=17*/
};
//数码管的位选择编码
const uchar SMG_BIT_CODE[10]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
#define SMG8_SetDS() setbit(smgPORT,DS)
#define SMG8_ClrDS() clrbit(smgPORT,DS) //数据引脚
#define smgSTCP_SET() setbit(smgPORT,STCP)
#define smgSTCP_CLR() clrbit(smgPORT,STCP) //上升沿更新数据
#define smgSHCP_SET() setbit(smgPORT,SHCP)
#define smgSHCP_CLR() clrbit(smgPORT,SHCP) //上升沿移入数据
#define smgDS_SET() setbit(smgPORT,DS)
#define smgDS_CLR() clrbit(smgPORT,DS) //数据引脚
/************************************************************************/
/* 函数名称:smgPortInit
函数功能:初始化8位共阳数码管的数据端口
入口参数:无
返回值:无 */
/************************************************************************/
void smgPortInit(void){
smgPORT|=((1< /************************************************************************/ /*函数名称:smg74HC595_WriteByte 函数功能:向74HC595发送一个字节数据 入口参数:ucData-要发送的数据 返回值:无 */ /************************************************************************/ void smg74HC595_WriteByte(uchar ucData){ for(uchar i = 0 ;i < 8;i++){//高位在前低位在后 if((ucData & (0x80>>i)) != 0) smgDS_SET(); else smgDS_CLR(); smgSHCP_CLR(); smgSHCP_SET();//SHCP引脚的上升沿移入数据 _delay_us(10); } } /************************************************************************/ /*函数名称:smgDisplay 函数功能:在8位共阳数码管的指定位置上显示一个字符 入口参数:bitCode-位选择码,即选择要在哪位数码管上显示数据 :segCode-数据段码选择,即要显示什么数据 :dp-当dp取值不等于0时,数码管将显示后面的小圆点 返回值:无 */ /************************************************************************/ void smgDisplay(uchar bitCode,uchar segCode,uchar dp){//在数码管的某一位上显示某一个字符 uchar a; if(dp==0) a=0x00; else a=0x80; smg74HC595_WriteByte(SMG_BIT_CODE[bitCode]); //显示在哪一个数码管上 smg74HC595_WriteByte(SMG_SEG_CODE[segCode]-a); //显示的数据 smgSTCP_CLR();
史海拾趣
|
关于视频系统处理器选择的建议基于ARM核心的Freescale的i.MX系列芯片是视频应用的佼佼者。 比如i.MX27和i.MX31 i.MX27嵌入式开发板是高清视频输入输出的首选,i.mx27芯片提供了更高的灵活性和更强大的多媒体处理能力,成为IP视频和语音(V2IP)、移 ...… 查看全部问答> |
|
关于7行5列LED键盘指示灯的编程,请高手解惑!十万火急!万分感谢! 7行5列的LED键盘指示灯,键按下时相应的LED指示灯也会亮! 灯亮的原则:列为高电平,行为低电平。 我想问的是,如果我知道了第0行第0列的键按下了,想要第0行第0列的灯亮,那么是不是应该让列所在的存储器第0位置1,其余列置0!即将0x01输入到相 ...… 查看全部问答> |
|
单片机的用途非常广阔,各种智能控制的产品中都少不了它的身影,前景看好,因此引起了一阵阵学习单片机的热潮。 相信很多初学单片机的朋友都是从做流水灯开始的,因为流水灯的电路较为简单。看着按照自己的设想做成的流水灯变幻着不同的花样, ...… 查看全部问答> |
|
如题, 望版主推荐 一直以来,因ARM开发板每次换屏的时候都要重新生成NK,有没人做过在板子上驱动一个显卡IC来驱动LCD? 如果有,IC型号大家了解的有哪些? 如果增加了这个显卡IC,那么原来的Display驱动还要不要? 大家一起讨论讨论,突然想 ...… 查看全部问答> |
|
关于vs2005开发windows ce 5程序部署到机器的问题 1:首先非常感谢您的帮助,同时我找遍了google和baidu,没有找到,或许是关键字搜索的不好。所以来此提问。 2:问题描述如下 机器是广州市微嵌计算机科技的Arm9 的硬件系统,采用的是windows ce 5.0。该设备有一个特点是会将hwDir目 ...… 查看全部问答> |
|
小弟要实现如下功能: 当我点击打印操作时,程序弹出一个对话框,显示正在打印,在打印的过程中,必须使程序无法响应用户的其它任何操作。当打印结束时,显示打印成功或打印失败,然后才让程序可以继续响应用户其它操作。 请问这个如何解决哈? … 查看全部问答> |




