您的位置:首页 > 教育 > 培训 > 游戏app软件定制开发_国家企业网查询_百度大数据查询平台_怎样进行关键词推广

游戏app软件定制开发_国家企业网查询_百度大数据查询平台_怎样进行关键词推广

2025/2/27 2:30:43 来源:https://blog.csdn.net/u014087103/article/details/143979599  浏览:    关键词:游戏app软件定制开发_国家企业网查询_百度大数据查询平台_怎样进行关键词推广
游戏app软件定制开发_国家企业网查询_百度大数据查询平台_怎样进行关键词推广

 更多单片机学习笔记:
单片机学习笔记 1. 点亮一个LED灯
单片机学习笔记 2. LED灯闪烁
单片机学习笔记 3. LED灯流水灯
单片机学习笔记 4. 蜂鸣器滴~滴~滴~
单片机学习笔记 5. 数码管静态显示
单片机学习笔记 6. 数码管动态显示
单片机学习笔记 7. 独立键盘
单片机学习笔记 8. 矩阵键盘按键检测


0、实现的功能

        8*8点阵模块的使用,实现中文汉字的点阵循环显示​

1、Keil工程

1-1 8*8LED点阵屏

        LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏、银行窗口屏叫号屏以及停车系统等等

        共阳极指的是行线都是接的正极。9给正电,13给负电就点亮了。如果想要同时亮两个灯,也是用动态显示的方法来实现(分时循环显示,让人眼以为是同时显示的)

        而16个IO口的点阵,一般用两片74HC595芯片去驱动,只需要3个IO口即可完成

1-2 74HC595芯片工作原理

        74HC595芯片是一种串入并出的芯片,在电子显示屏制作当中有广泛的应用。 74HC595是8位串行输入/输出或者并行输出移位寄存器
        14脚DS是串行输入,一位一位的串行输入;
        9脚Q7是用于级联的输出端,并行输出;
        11脚SH_CP是上升沿(0---1)才存入数据,当DS输入时,只有SH_CP为01上升沿时才会把DS输入的数据,存入内部的8位移位寄存器中;所以一般接时钟信号
        12脚ST_CP是上升沿(0---1)才并行输出移位寄存器中的数据,同时还会锁存数据,只要寄存器中的数据没有更新,在上电的情况下都不会改变Q0-Q7;
        10脚/MR是低电平清零,一般不需要,所以直接接VCC;
        13脚/OE是高电平禁止输出(高阻态),一般接GND;
        16脚VCC一般2-6V

2、代码实现

2-1 点亮一个点

        先点亮一个点。行号上面是高位,列号右边是高位。列号接的是2号74HC595,行号接的是1号,所以先输入列号再行号,这样子输入串行数据时才会把行号挤到2号595上。
        用for去输入串行数据

        代码实现:

#include<reg52.h>
sbit DIO = P3^4;	//串行数据脚
sbit S_CLK = P3^5;		//移位寄存器时钟信号
sbit R_CLK = P3^6;		//输出锁存器的时钟void main()
{//ROW 0x80, COL 0xfeunsigned char i;dat = 0xfe;		//先发列值for(i=0;i<8;i++){S_CLK = 0;R_CLK = 0;if(dat & 0x01)    //当串行输入的一位数据为1时DIO=1DIO = 1;elseDIO = 0;S_CLK = 1;		//给S_CLK上升沿,将数据送入移位寄存器中dat = dat >> 1;		//输入一位后,dat要右移动一位//dat >>= 1;和上面这句一样} 	//循环8次,将0xfe发出dat = 0x80;for(i=0;i<8;i++){S_CLK = 0;R_CLK = 0;if(dat & 0x01)DIO = 1;elseDIO = 0;S_CLK = 1;		//给S_CLK上升沿,将数据送入移位寄存器中dat = dat >> 1;		//输入一位后,dat要右移动一位}R_CLK = 1;	//给R_CLK一个上升沿,将数据从移位寄存器中输出到Q0-Q15(并行输出)	while(1);
} 

        可以把该函数集成写到一个函数中,方便调用:

#include<reg52.h>
sbit DIO = P3^4;	//串行数据脚
sbit S_CLK = P3^5;		//移位寄存器时钟信号
sbit R_CLK = P3^6;		//输出锁存器的时钟void Send_Byte(unsigned char dat)
{unsigned char i;S_CLK = 0;R_CLK = 0;for(i=0;i<8;i++){if(dat & 0x01)DIO = 1;elseDIO = 0;S_CLK = 1;dat >>= 1;S_CLK = 0;		//每次循环完都要把S_CLK拉低,以便下次上升沿触发} 	
}
void main()
{Send_Byte(0xfe);		//发送列值Send_Byte(0x40);		//发送行值while(1);
} 

        实物展示:

2-2 中文显示

        下面进行显示中文,要用到动态扫描,分时去显示。显示一个中文行列都要扫描8次,循环显示两个汉字的话就再加个for循环即可,但要加上延时模块
        用辅助软件去生成每个汉字的列选数据,行选数据直接8行循环即可

代码实现:

#include<reg52.h>
#include<intrins.h>
sbit DIO = P3^4;	//串行数据脚
sbit S_CLK = P3^5;		//移位寄存器时钟信号
sbit R_CLK = P3^6;		//输出锁存器的时钟unsigned char code table[2][8] = {	   //[2]表示二维数组
0xE0,0xEE,0x01,0x6D,0x01,0x6D,0x01,0xEF;	//电
0xE7,0xF7,0xF7,0xF7,0x81,0xF7,0xFB,0xC3		//子
};
//0xEF,0x01,0x6D,0x01,0x6D,0x01,0xEE,0xE0
void Send_Byte(unsigned char dat)
{unsigned char i;S_CLK = 0;R_CLK = 0;for(i=0;i<8;i++){if(dat & 0x01)DIO = 1;elseDIO = 0;S_CLK = 1;dat >>= 1;S_CLK = 0;		//每次循环完都要把S_CLK拉低,以便下次上升沿触发} 	
}
void main()
{unsigned char j, k, ROW;unsigned int z;		//为了字体与字体之间的延时while(1){	for(k=0; k<2; k++)	//循环显示两个字{for(z=0; z<1000; z++)	//延时显示,加个delay函数也行	{ROW = 0x80;		//行号初始值为第一行for(j=0;j<8;j++){Send_Byte(table[k][j]);		//发送列号Send_Byte(ROW);		//发送行号R_CLK = 1;		//R_CLK上升沿,直接输出移位寄存器的数据R_CLK = 0;ROW = _cror_(ROW, 1);		//行号循环右移一位}}}}
} 

        实物展示:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com