-
74HC595驱动数码管程序
/*******************************************************
* 程序名称:main.c
* 程序功能:主程序文件,595控制数码管
* 程序作者:吴鉴鹰
* 创建时间:2014-12-8
* 修改时间:2014-12-8
* 程序版本:V0.1
******************************************************/
/*
* 包含的头文件
*/
#include "reg51.h"
#include "inc/hc595.h"
#include "inc/delay.h"
#include "intrins.h"
/* 存储待发送的数据 */
/* 1->8的段码表 */
code unsigned char ucDataOneTab[8] = {0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f};
/* 位码表 */
code unsigned char ucDataTwoTab[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
/******************************************************
* 函数名称:main
* 函数功能:主函数
* 入口参数:void
* 出口参数:
*******************************************************/
int main()
{
unsigned int i;
while (1)
{
P1 = 0X00;
Delay1ms(1);
P1 = 0XFF;
Delay1ms(1);
for (i = 0; i < 8; i++ )
{
SendData(ucDataOneTab[i], ucDataTwoTab[i]);
Delay1ms(1);
}
}
return 0;
}复制代码
-
其实我现在对74HC595的理解就是8个D触发器串联,构成的移位寄存器~~
-
74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。
数据在SHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
我的硬件连接:用级联方式连接!
工作顺序:单片机先送1个8位数据到第一个595的内部移位寄存器->然后数据会送到内部的输出寄存器->输出
当MR(10引脚)为高电平,OE(13引脚)为低电平时,数据在SHCP上升沿进入移位寄存器,在STCP上升沿输出到并行端口。
可能这还不太好理解,没关系,咱去程序应用中理解!
请看一个简单的程序:
sbit SDA1 = P0^0; //串行数据输入,对应595的14脚SER
sbit SCL1 = P0^1; //移位寄存器时钟输入,对应595的11脚SCK
sbit SCL2 = P0^2; //存储寄存器时钟输入,对应595的12脚RCK
unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//0 1 2 3 4 5 6 7 8 9
unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void delay2ms(void)
{
unsigned char i,j;
for(i=133;i>0;i--)
for(j=6;j>0;j--);
}
void 595_in(unsigned char Data)
{
unsigned char i;
for(i = 0; i < 8; i++) //循环8次,刚好移完8位
{
SCL1 = 0; //先将移位寄存器控制引脚置为低
_nop_();
if((Data & 0x80)== 0x80)
SDA1 =1;
else
SDA1 =0;
Data
-
2016.2.24心得分享:
搞懂了74HC595时序的概念,懂了啥叫上升沿,啥叫下降沿。
-
这三天的任务,完成数码管的显示操作。
-
-
吴鉴鹰. 发表于 2016-2-23 10:25
坚持下去,你会成功的。
能收到鹰哥的亲自回答,好开森:)
-
-
我会一直坚持下去的。
-
对74HC595的理解,其实就是8个D触发器构成的移位寄存器。
-
dong2213dong 发表于 2016-2-22 14:43
建议楼主把自己的理解整理出来,比如51的IO口工作原理、74HC595的工作过程等记录下来,或许更有利于以后你 ...
后面我会写的
-
我是糕肤摔 发表于 2016-2-22 14:36
2016.2.22日单片机学习记录:一、完成74HC595驱动16位LED实现流水灯的实验
1、看完《吴鉴鹰单片机技术精讲 ...
每进步一点点,加油~~~
-
2016.2.22日单片机学习记录:一、完成74HC595驱动16位LED实现流水灯的实验
1、看完《吴鉴鹰单片机技术精讲视频第一讲》
2、关掉视频自己编写代码
#include
sbit HC595_sck = P0^5;
sbit HC595_rck = P0^6;
sbit HC595_data = P0^7;
code unsigned char Data_One_Array[2] = {0x01,0x00};
code unsigned char Data_Two_Array[2] = {0x00,0x00};
void Send_Data(unsigned char Data_One,unsigned char Data_Two)
{
unsigned char i;
HC595_rck = 0;
for(i=0; i < 8;i ++)
{
HC595_sck = 0;
if(0 == (Data_One & 0x80))
{
HC595_data = 0;
}
else
{
HC595_data = 1;
}
Data_One = Data_One
-
今天完成51单片机驱动74HC595控制16个LED灯的实验。
-
soso 发表于 2016-2-22 09:25
楼主有新进展不?该分享了,不是让我们监督么?
马上分享啊
-
白丁 发表于 2016-2-21 13:30
楼主是个高富帅
我是糕羊 肤浅 摔倒的简称,糕肤摔~~~
-
白丁 发表于 2016-2-20 21:07
加油加油加油
版主是个帅锅~~~
-
le062 发表于 2016-2-21 11:56
学好c语言,理解外设的控制逻辑就行了。
注意:c语言能力 是指能看明白linux内核
版主说的好有道理,我竟无言以对~~~
-
suoma 发表于 2016-2-20 22:35
加油,希望你喜欢电子世界
我很喜欢eeworld的。
-
今天学习了第一讲,用74HC595驱动LED,第一次知道什么是时序。