试用网站如何做,网站开发毕业设计书,手机wap网页,怎么更新电脑的wordpress目录
目的/效果
一#xff0c;STC单片机模块
二#xff0c;8*8 LED点阵模块
2.1 电路图
2.1.1 8*8 点阵模块电路图
2.1.2 74HC595#xff08;串转并#xff09;模块 电路图
2.1.3 芯片引脚
2.2 引脚电平分析
2.3 74HC595 串转并模块
2.3.1 装弹#xff08;移位…目录
目的/效果
一STC单片机模块
二8*8 LED点阵模块
2.1 电路图
2.1.1 8*8 点阵模块电路图
2.1.2 74HC595串转并模块 电路图
2.1.3 芯片引脚
2.2 引脚电平分析
2.3 74HC595 串转并模块
2.3.1 装弹移位寄存器
2.3.2 发弹存储寄存器
2.4 STC89C52RC 中的sfr、sbit
2.4.1 sfrspecial function register特殊功能寄存器声明
2.4.2 sbitspecial bit特殊位声明
2.4.3 可位寻址/不可位寻址
三创建Keil项目
四代码
五代码编译、下载到51单片机
目的/效果
程序控制点亮点阵LED 第1行第一列LED 一STC单片机模块 二8*8 LED点阵模块
2.1 电路图
2.1.1 8*8 点阵模块电路图 2.1.2 74HC595串转并模块 电路图 2.1.3 芯片引脚 2.2 引脚电平分析
我们要点亮左下角 第一个 LED需要将P70和DPa接通其他引脚不管如下图 将LED点阵左边第一列设置为0即LED阴极为低电平其余列为1即高电平
将LED点阵上边第一行设置为1即LED阳极为高电平其余行为0即低电平
对于74HC595模块的电平如下 这里要注意跳线帽OE 输出有效低电平我们直接可以拔掉或者接GND上 DP上的HEX0x801000 0000二进制
那么对于引脚P35RCLK、P36SRCLK、P34SER输入怎样的数据DPa-DPh 才会输出1000 0000 的电平呢我们就要详细分析这个74HC595译码器。
2.3 74HC595 串转并模块 74HC595 是一个 8 位串行输入、并行输出的位移缓存器其中并行输出为三 态输出即高电平、低电平和高阻抗
移位寄存器工作方式就像手枪弹夹但是子弹的发射(移位寄存器中的数据转储到存储寄存器)又像是【散弹】(因为是并行输出嘛)。
具体的装弹和发弹如下 2.3.1 装弹移位寄存器
上升沿电平从低到高的那个过程。移位寄存器时钟在上升沿这个过程中才起作用。 先把数据放到针脚P34SER上SER1低电平 或者SER0 高电平
然后将 将P36SRCLK 针脚 先置低电平SRCLIK1再置高电平SRCLK0。这样就是实现了由上升沿 移位寄存装弹的效果。不过要注意这里不能立即置0机器也需要处理时间。这里我们需要将程序延时10微秒后再做处理。 2.3.2 发弹存储寄存器 数据从位移寄存器转移到存储寄存器也是需要时钟脉冲驱动的这就是P35(RCLK)脚的作用。它也是上升沿有效。
2.4 STC89C52RC 中的sfr、sbit
2.4.1 sfrspecial function register特殊功能寄存器声明 例sfr P0 0x80; 声明P0口寄存器物理地址为0x80
2.4.2 sbitspecial bit特殊位声明 例sbit P0_1 0x81; 或 sbit P0_1 P0^1; 声明P0寄存器的第1位
比如本节我们用到了下面几个我们把针脚P34、P35、P36定义用对应申明在使用时不在写针脚地址寄存器当然也可以继续使用针脚作用一样。
//定义74HC595控制管脚
sbit _SRCLKP3^6; //移位寄存器时钟输入
sbit _RCLKP3^5; //存储寄存器时钟输入 注意在 REGX52.H 中已经申明了RCLK
sbit _SERP3^4; //串行数据输入
2.4.3 可位寻址/不可位寻址
在单片机系统中操作任意寄存器或者某一位的数据时必须给出其物理地址又因为一个寄存器里有8位所以位的数量是寄存器数量的8倍单片机无法对所有位进行编码故每8个寄存器中只有一个是可以位寻址的。对不可位寻址的寄存器若要只操作其中一位而不影响其它位时可用“”、“|”、“^”的方法进行位操作
三创建Keil项目
详细参考51单片机STC89C52RC——创建Keil项目-CSDN博客
四代码
main.c
#include REGX52.H
#include 74HC595.h
/*** 函 数主函数* 参 数无* 返 回 值无*/
void main()
{ while(1){_74HC595_Show(0,0x80);//点亮第一行第一个LED}
}
Delay.c
/*** 函 数延时函数 毫秒* 参 数ms 延时多少毫秒* 返 回 值无*/
void Delay_ms(int ms) //12.000MHz
{unsigned char data i, j;while(ms--){ i 2;j 239;do{while (--j);} while (--i);}
}
/*** 函 数延时函数 毫秒* 参 数ms 延时多少毫秒* 返 回 值无*/
void Delay_us(int ms) //12.000MHz
{unsigned char data i, j;while(ms--){ i 2;j 239;do{while (--j);} while (--i);}
}
/*** 函 数延时函数 10微秒* 参 数无* 返 回 值无*/
void Delay_10us(int _10us) //11.0592MHz
{unsigned char data i;while(_10us--){i 2;while (--i);}
} Delay.h
#ifndef __DELAY_H_
#defind __DELAY_H_
void Delay_ms(int ms);
void Delay_10us(int _10us);
#endif74HC595.c
#include REGX52.H
#include Delay.h//定义74HC595控制管脚
sbit _SRCLKP3^6; //移位寄存器时钟输入
sbit _RCLKP3^5; //存储寄存器时钟输入 注意在 REGX52.H 中已经申明了RCLK
sbit _SERP3^4; //串行数据输入 /*** 函 数74HC595写入一个字节* 参 数Byte 要写入的字节* 返 回 值无*/
void _74HC595_WriteByte(unsigned int Byte)
{ unsigned char i;for(i0;i8;i){_SERByte(0x80i); //将1000 0000 右移i位后 Byte_SRCLK0; //移位寄存器置搞电平Delay_10us(1);_SRCLK1; //移位寄存器置低电平/*这里有需要可以延时10微秒*/Delay_10us(1);}_RCLK1; //存储寄存器置低电平Delay_10us(1);_RCLK0; //存储寄存器置搞电平
}
/*** 函 数LED点阵屏显示一列数据* 参 数Column 要选择的列范围0~70在最左边,Data 选择列显示的数据高位在上1为亮0为灭* 返 回 值无*/
void _74HC595_Show(unsigned char Column,Byte)
{_74HC595_WriteByte(Byte); //向行写入数据P0~(0x80Column); //向列写入数据Delay_10us(1); //等待显示稳定
} 74HC595.h
#ifndef __74HC595_H_
#defind __74HC595_H_
void _74HC595_WriteByte(unsigned int Byte);
void _74HC595_Show(unsigned char Column,Byte);
#endif五代码编译、下载到51单片机
代码编译请参考
《51单片机STC89C52RC——代码编译-CSDN博客》
代码下载请参考
《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》