历史上的今天
今天是:2025年03月02日(星期日)
2020年03月02日 | 深入理解单片机的串转并IC-74HC595的工作时序及用法
2020-03-02 来源:51hei
本人新手一枚,正在学51单片机,买了一块开发板,配套的教程解释有点错误,摸索了一天,把程序改了一下,更能方便理解单片机的串转并IC-74HC595的工作时序及用法
(74HC595的规格书及8*8LED点阵模块电路这里省略)
程序功能:通过主程序调用发送数据的子函数,发送了两个数据,分别点亮LED阵列的第一列的底下一个LED和顶上的七个LED,并交替闪烁
#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
//--定义使用的 IO 口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
sbit LED=P0^7;
//sbit LED1=P0^6;
/********************************************************************
***********
* 函 数 名 : Hc595SendByte(u8 dat1,u8 dat2)
* 函数功能 : 通过 595 发送 2 个字节的数据
* 输 入 : dat1:第 2 个 595 输出数值
* * dat2: 第 1 个 595 输出数值
* 输 出 : 无
*********************************************************************
**********/
void Hc595SendByte(u8 dat1,u8 dat2)
{
u8 a;
u16 b;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //发送 8 位数
{
SER = dat1 >> 7; //从最高位开始发送
dat1 <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
for(b=0;b<65535;b++){} //加入延时,方便在开发板上看清HC595发送第一个数据时,点亮的LED
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //发送 8 位数
{
SER = dat2 >> 7; //从最高位开始发送
dat2 <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
for(b=0;b<65535;b++){} // 加入延时,方便在开发板上看清看清HC595发送第一个数据时,点亮的LED
}
/********************************************************************
***********
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*********************************************************************
**********/
void main()
{ LED=0; //使第一列为低电平。
while(1)
{
Hc595SendByte(0x01,0xfe);
}
}
下一篇:51单片机中断、串口通信综合程序
史海拾趣
|
哥们刚改进过的USB2.0转IDE硬盘的SCH,兼容笔记本硬盘.PROTEL99SE格式. 哥们刚改进过的USB2.0转IDE硬盘的SCH,兼容笔记本的IED44硬盘.PROTEL99SE格式.性能不错,每分钟近500M的传输速度! [ 本帖最后由 西门 于 2009-5-12 21:17 编辑 ]… 查看全部问答> |
|
出错:i2cwrite error:1460 麻烦高手指点一二 12c init iic irq mapping :[irq:27->sysIRQ:21]. OEMIoControl:Unspported Code 0x10100b4-device 0x0101 func 52 OEMIoControl:Unspported Code 0x10100b4-device 0x0101 func 62 CamCLOCKOn=1 syncist:IO_Abandoned I2CWrite error :1460 ...… 查看全部问答> |
|
问题如下: 我现在接手别人的工作,驱动别人是用evc4.2写dll,驱动经测试可用。 我现在用C#开发应用程序。 现在的问题是,驱动writefile第二个参数他传的是 ...… 查看全部问答> |
|
看到一位大牛在定义一个数组时这样定义的:V_MEMROM0 V_MEMROM1 unsigned char V_MEMROM2 CanTxId2[kCanNumberOfTxObjects] ; 不知道加上V_MEMROM0和V_MEMROM1 是什么意思 其中声明是:#ifndef V_MEMROM1 # define V_M ...… 查看全部问答> |
|
福禄克万用表是指美国品牌福禄克旗下的一款仪器;万用表是我们日常生活中不可缺少的测量工具,根据使用场合的不同,我们要选择合适的万用表来使用。万用表具有用途多,量程广,使用方便等优点,是电子测量中使用最多的工具之一。它不仅可以用来 ...… 查看全部问答> |




