目的:通过 74HC595 模块控制 LED 点阵以一行循环滚动显示。
编译软件:keil5
过程:
(1)先定义好74HC595 控制管脚,以及点阵列控制口
//定义 74HC595 控制管脚
sbit SRCLK=P3^6; //移位寄存器时钟输入
sbit RCLK=P3^5; //存储寄存器时钟输入
sbit SER=P3^4; //串行数据输入
#define LEDDZ_COL_PORT P0 //点阵列控制端口
u8 ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
(2)重新定义了一个 ms 级延时函数 delay_ms,该函数与前面 delay_10us 类似,都是利用循环占用 CPU 起到延时效果
void delay_ms(u16 ms)
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
(3)定义了 74HC595 的控制函数 hc595_write_data,该函数完全按照 74HC595 的通信时序要求编写,主要要注意 的是 74HC595 是先传输字节的高位后传输低位,所以需要将字节低位移动到高位传输,在传输数据时,要注意移位寄存器时钟和存储寄存器时钟的先后顺序,将 要写入的数据先传输到 74HC595 寄存器中,即在准备好每位数据时要将 SRCLK 进行一个上升沿变化,此时即可将数据传输到寄存器内,待循环 8 次即一个字节 传输到寄存器中时,就可以来一个存储时钟上升沿,此时就可以将 74HC595 寄存 器中的数据全部一次传输到 595 端口输出。
void hc595_write_data(u8 dat)
{
u8 i=0;
for(i=0;i<8;i++)//循环 8 次即可将一个字节写入寄存器中
{
SER=dat>>7;//优先传输一个字节中的高位
dat<<=1;//将低位移动到高位
SRCLK=0;
delay_10us(1);
SRCLK=1;
delay_10us(1);//移位寄存器时钟上升沿将端口数据送入寄存器中
}
RCLK=0;
delay_10us(1);
RCLK=1;//存储寄存器时钟上升沿将前面写入到寄存器的数据输出
}
(4)main 函数中调用 74HC595 的控制函数,将实验中要实现的效果数据写入进去,从而控制 LED 点阵的阳极, 而阴极由 P0 口控制,默认初始化时已经设置为 0,也就是说只要 595 输出高电 平,那么对应的行就会点亮。
void main()
{
u8 i=0;
LEDDZ_COL_PORT=0x00;//将 LED 点阵列全部设置为 0,即 LED 阴极为低电平
while(1)
{
for(i=0;i<8;i++)
{
hc595_write_data(0x00);//消除前面寄存器缓存数据
hc595_write_data(ghc595_buf[i]);//写入新的数据
delay_ms(500);//延时 500ms
}
}
(5)编译整段代码烧录到开发板
(6)如图连接观察实验现象
关键字:c51单片机 IO扩展 串转并 74HC595
引用地址:
c51单片机学习笔记-IO扩展(串转并)实验 - 74HC595
推荐阅读最新更新时间:2024-10-31 11:15
C51单片机学习笔记(二)——花样流水灯的实现
1.单片机引脚、晶振、复位的作用 复位电路:,复位是单片机的初始化操作。单片机启动时都需要先付薇,其作用是“清零”,也就是CPU和其他部件处于一个确定的初始状态,并从这个初始状态开始。 复位实质上是单片机的复位脚保持很短时间的高电平,按键复位就是通过按键接高电平(按一下的时间已经足够) 时钟电路(晶振):产生时间信号,使单片机按照一定的时间规律进行指令,晶振频率越高,时钟信号的周期就小,单片机运行也就越快。 32个I/O口 P1.0 ~ P1.7 对应1 ~ 8 号引脚 P2.0 ~ P2.7 对应21 ~ 28 号引脚 P3.0 ~ P3.7 对应10 ~ 17 号引脚 P0.0 ~ P0.7 对应39
[单片机]
89C51单片机按键控制数码管动态显示0~9
1.preteus仿真图 2.keli代码 #include reg51.h sbit key1=P3^0; int CC_num ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int CC_I=0; void delay_ms(int ms) { int i,j; for(i=0;i ms;i++) for(j=0;j 110;j++); } void key1_exam() { if(key1 == 0) { //按钮延时去抖动 delay_ms(20); if(key1 =
[单片机]
80c51单片机的控制总线信号有哪些 80c51单片机特点
80c51单片机的控制总线信号有哪些 80C51单片机的控制总线信号包括以下几种: ALE(Address Latch Enable)地址锁存使能信号:当CPU向外部总线发出地址时,ALE信号会使地址锁存器(Latch)中的地址保持稳定,供外设使用。 PSEN(Program Store Enable)程序存储器使能信号:当CPU要从程序存储器中读取指令时,PSEN信号会使程序存储器选择器(Program Memory Selector)选择程序存储器。 RD(Read)读信号:当CPU从外部读取数据时,RD信号会通知外设将数据准备好。 WR(Write)写信号:当CPU向外部写入数据时,WR信号会通知外设
[单片机]
STC89c51单片机的定时器T2
定时器T2的功能比T1、T0都强大,但描述它的资料不多,可能是使用得比较少的缘故吧。它是一个16位的具有自动重装和捕获能力的定时/计数器,它的计数时钟源可以是内部的机器周期,也可以是P1.0输入的外部时钟脉冲。T2的控制寄存器的功能描述如下: TCON2(T2的控制寄存器),字节地址0C8H: 位地址 0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8H 符号 TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下: TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或
[单片机]
8位数码管显示电子时钟c51单片机程序
/* 8位数码管显示 时间格式 05—50—00 标示05点50分00秒 S1 用于小时加1操作 S2 用于小时减1操作 S3 用于分钟加1操作 S4 用于分钟减1操作 */ #include reg52.h sbit KEY1=P3^0; //定义端口参数 sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; sbit LED=P1^2; //定义指示灯参数 code unsigned char tab ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0—9 unsigned char
[单片机]
用AT89C51单片机控制步进电机的汇编源程序
下面程序完成的主要功能:实现步进电机的正反转,加速、减速;显示电机转速(转速级别)和工作状态(正转、反转、不转)。 源程序 SPEED EQU 10H ;SPEED为转速等级标志,共7级,即1~7 FX EQU 11H ;FX 为方向标志 COUNT EQU 12H ;COUNT中断次数标志 ORG 0000H AJMP MAIN ORG 0003H ;外部中断0入口地址,加速子程序 AJMP UP ORG 0013H ;外部中断1入口地址,减速子程序 AJMP DOWN ORG 000BH ;定时器0中断入口地址,控制中断次数来达到控制转速 AJMP ZDT0
[单片机]
基于AT89C51单片机的RS 232串行数据截取器设计
0 引言 目前,我国的装备技术水平和发达国家相比还有一定的差距,对于国外引进的先进设备,如何才能在没有任何技术资料的情况下破解其技术瓶颈,实现装备技术水平的跨越式发展是我国普遍面临的技术难题。为此作者认为获取设备与控制计算机之间的通信数据,分析其通信协议是解决这个难题的基础。基于此,本文设计了数据截取器。 很多设备和其控制计算机之间采用的是RS 232标准串行接口进行通信,本文设计和实现了RS 232串行通信数据截取器,能有效地截取设备与其控制计算机之间的通信数据。 1 截取器硬件部分设计 1.1 总体框图及原理 系统原理框图如图1所示。 原理分析:具体设备与其控制计算机之间的通信线路通过电平转换分两路。一路是
[单片机]
80C51单片机上电复位和复位延时的时序分析
80C51单片机的上电复位POR(Power On Reset)实质上就是上电延时复位,也就是在上电延时期间把单片机锁定在复位状态上。为什么在每次单片机接通电源时,都需要加入一定的延迟时间呢?分析如下。 1 上电复位时序 在单片机及其应用电路每次上电的过程中,由于电源回路中通常存在一些容量大小不等的滤波电容,使得单片机芯片在其电源引脚VCC和VSS之间所感受到的电源电压值VDD,是从低到高逐渐上升的。该过程所持续的时间一般为1~100 ms(记作taddrise)。上电延时taddrise的定义是电源电压从10% VDD上升到90% VDD所需的时间,如图1所示。 图1 上电延时taddrise和起振延时tosc实
[单片机]