点阵屏显示原理及实验详解
12864点阵型液晶显示屏的基本原理与使用方法(很详细)

12864点阵型液晶显示屏的基本原理与使用方法(很详细)点阵LCD的显示原理在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。
而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。
而剩下的低128位则留给英文字符使用,即英文的内码。
那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:图1“A”字模图而中文的“你”在字模中的记载却如图2所示:图2“你”字模图12864点阵型LCD简介12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4个(16×16点阵)汉字。
管脚号管脚名称LEVER管脚功能描述1VSS0电源地2VDD+5.0V电源电压3V0-液晶显示器驱动电压4D/I(RS)H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR 6E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 7DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15CS1H/L H:选择芯片(右半屏)信号16CS2H/L H:选择芯片(左半屏)信号17RET H/L复位信号,低电平复位18VOUT-10V LCD驱动负电压19LED+-LED背光板电源20LED--LED背光板电源表1:12864LCD的引脚说明在使用12864LCD前先必须了解以下功能器件才能进行编程。
(完整word版)LED点阵显示原理与应用

8X8 LED点阵显示原理与应用LED点阵显示屏广泛应用与汽车报站器,广告屏等。
8X8 LED点阵是最基本的点阵显示模块,理解8X8 LED点阵的工作原理就可以基本掌握LED点阵显示技术。
一、LED点阵显示的基本原理8X8点阵LED结构如下图所示:列〔阴极)紅1 2 3 4 5 6 7 8从图中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平, 则相应的二极管就亮;要实现显示图形或字体,只需考虑其显示方式。
通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。
例如:要实现一根柱形的亮法,如图所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:一根竖柱:对应的列置1,而行则采用扫描的方法来实现。
一根横柱:对应的行置0,而列则采用扫描的方法来实现。
二、实例应用1、在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。
分析:此任务是比较简单的,最基础的LED点阵显示应用。
只需设置显示的起始地址(即起始状态),列出LED行扫描、列扫描的顺序输出,再设置一个延时即可循环显示。
源程序:#include <AT89X52.H>unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 行扫描显示编码unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //列扫描显示编码void delay(void)// 设置延时{ unsigned char i,j;for(i=10;i>0;i--) for(j=248;j>0;j--);}void delay1(void){ unsigned char i,j,k;for(k=10;k>0;k--) for(i=20;i>0;i--) for(j=248;j>0;j--);}void main(void){unsigned char i,j;while(1){ for(j=;j<3;j++)//从左向右三次{ for(i=0;i<8;i++) {P3=taba[i]; P1=0xff;delay1();} }for(j=0;j<3;j++) //从右向左三次{for(i=0;i<8;i++){P3=taba[7-i];P1=0xff;delay1();}}for(j=0;j<3;j++) //从上向下三次{ for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; delay1();}}for(j=0;j<3;j++) //从下向上三次{ for(i=0;i<8;i++) { P3=0x00; P1=tabb[i]; delay1();}}}}2、数字0-9 点阵循环显示分析:重点是数字0-9 点阵显示代码的形成:如下图所示,假设显示数字“ 0”1 2 3 4 5 6 7 8••••••••••••••••00 00 3E 41 41 41 3E 00因此,形成的列代码为OOH, OOH, 3EH, 41H, 41H, 3EH, OOH, 00H;只要把这些代码分别送到相应的列线上面,即可实现“ O”的数字显示。
12864点阵型液晶显示屏的基本原理与使用方法(很详细)

0
0
1
1
1
0
0
1
1
X
X
X
0
0
1
0
1
1
1
0
0
0
1
X
X
X
1
0 BUSY 0 ON/OFF RST 0
0
1
写数据
1
1
读数据
DB2 1 X X X 0
DB1 1 X X X 0
DB0 1/0
X X X 0
表 2:12864LCD 指令表
各功能指令分别介绍如下。
显示开/关指令
R/WRS 00
DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 00111111/0
设置了页地址和列地址,就唯一确定了显示 RAM 中的一个单元,这样 MPU 就可以
用读、写指令读出该单元中的内容或向该单元写进一个字节数据。
5、读状态指令
R/WRS 10
DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 BUSY0ON/OFFREST0000
该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下:
图 2 “你”字模图
12864 点阵型 LCD 简介
12864 是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及 128×64 全点阵液晶显示器组成。 可完成图形显示,也可以显示 8×4 个(16×16 点阵)汉字。
管脚号 1 2 3 4
管脚名称 VSS VDD V0
D/I(RS)
LEVER 0
12864LCD 的指令系统及时序
该类液晶显示模块(即 KS0108B 及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指 令表如表 2 所示:
led点阵显示屏工作原理

led点阵显示屏工作原理
LED点阵显示屏是一种使用LED灯珠组成像素点的显示设备,可以显示文字、图像和动态效果。
它是由许多个LED灯珠组
成的矩阵,每个LED灯珠充当一个像素点。
LED点阵显示屏的工作原理是通过控制每个LED灯珠的亮灭
状态来显示图像。
每个像素点都有一个控制器,控制器通过电信号控制LED灯珠的开关状态。
当需要显示某个像素点时,
相应的控制器发送控制信号,使对应的LED灯珠点亮,而其
他灯珠则保持熄灭状态。
通过不同的LED灯珠亮灭组合,可
以显示出不同的图案和文字。
LED点阵显示屏通常采用的是逐行扫描的方式进行显示。
当
需要显示一行像素点时,控制器按照预设的规律依次发送控制信号,点亮该行的LED灯珠。
然后快速切换到下一行,再次
发送控制信号。
通过不断重复这个过程,整个屏幕的像素点逐行点亮,最终形成完整的图案。
此外,LED点阵显示屏还需要外部的控制电路来生成控制信号。
通常使用的是微控制器或专门的驱动芯片,通过编程控制LED灯珠的亮灭状态。
控制信号可以通过串行通信或并行通
信的方式传输到控制器。
总的来说,LED点阵显示屏通过控制LED灯珠的亮灭状态来
显示图案和文字。
通过逐行扫描的方式进行显示,并使用控制电路生成相应的控制信号。
这样就能够实现LED点阵显示屏
的工作原理。
1616点阵LED显示屏的原理与制作实验报告

16*16点阵LED显示屏的原理与制作实验报告一、实验目的1.学会LED点阵模块的引脚判别,学会多块LED点阵模块的拼接使用。
2.进一步了解LED点阵的显示原理。
3.了解用单片机控制LED点阵显示字符的基本原理。
4.学会根据电路图连接电路。
二、实验内容在4块8*8LED合并而成的16*16LED显示屏上显示名字。
三、实验过程1.显示屏驱动电路原理图2.程序编写#include<reg52.h>#define CCED2 0x0000 /*吴*/unsigned char code word_zai[16][2] = {/*吴CCED2 */0x00,0x84,0x00,0x84,0x80,0x44,0xBE,0x44,0xA2,0x24,0xA2,0x14,0xA2,0x0C,0xA 2,0x07,0xA2,0x0C,0xA2,0x14,0xA2,0x24,0xBE,0x64,0x80,0xC4,0x00,0x44,0x00,0x04,0x0 0,0x00};/*"吴",0*/void main(){ char scan,i,j;P0=0;P1=0;P2=0;while(1){ scan=0;for(i=0;i<16;i++){ P1=scan;for(j=0;j<50;j++) //显示五十次{ P2=word_zai[i][0] ;P0=word_zai[i][1] ;}P0=0;P2=0;scan++;}}}四、实验总结在本次的实验里,我感觉本次实验的任务对我的挑战蛮大,因为在实验中要编写一个C语言有点麻烦,需要算的数据比较多,一不小心的话可能就会导致最后的实验结果出现问题,所以要非常的仔细才行。
详解点阵LED显示屏的原理与制作过程

详解点阵LED显示屏的原理与制作过程
汉字显示屏到处可见,被广泛应用于与汽车报站器,广告屏等。
本文中的16*16LED显示屏是采用4块8*8LED合并而成的。
下图是4个8*8LED组成的显示屏。
(图1)
这里我把点阵LED显示屏制作的电路原理分成两个部分来介绍即显示屏电路和显示屏驱动电路。
一、显示屏电路
本人用的是共阴极的8*8点阵屏,在市场上是比较容易买到,下图是
8*8点阵屏的实物图。
(图2)
点阵屏有两个类型,一类为共阴极(左),另一类则为共阳极(右),下图给出了两种类型的内部电路原理及相应的管脚图。
(图3)
LED阵列的显示方式是按显示编码的顺序,一行一行地显示。
每一行的显示时间大约为4ms,由于人类的视觉暂留现象,将感觉到8行LED是在同时显示的。
若显示的时间太短,则亮度不够,若显示的时间太长,将会感觉到闪烁。
本文采用低电平逐行扫描,高电平输出显示信号。
即轮流给行信号输出低电平,在任意时刻只有一行发光二极管是处于可以被点亮的状态,其它行都处于熄灭状态。
为了方便调试本文把4块8*8组成的16*16的点阵屏的行信号扫描输出管脚和列信号显示输出管脚分别引到显示屏的两边。
Protel原理图如下:
(图4)
如图4 所示的原理图中的Si(i=1,2,3,,16)代表行扫描信号输出,Di(i=1,2,3,,16)代表列显示信号输出。
实物电路图的正反面如下:
(图5) 。
LED点阵实验报告

LED点阵实验报告实验报告:一、实验背景与目的:LED点阵是一种常见的显示设备,由多个LED灯组成,通过控制每个LED灯的亮灭来实现信息的展示。
本实验的目的是通过搭建LED点阵电路,掌握LED点阵显示驱动原理及实现方法,并进一步了解数字显示、字符显示等功能。
二、实验器材与原理:1.实验器材:(1)LED点阵模块(2)Arduino UNO开发板(3)跳线若干(4)面包板2.实验原理:LED点阵是由多个LED灯组成的矩阵结构,通过控制每个LED的亮灭来实现不同的图案和字符显示。
在Arduino开发环境中,可以通过控制数字输出口的高低电平来实现LED点阵的驱动。
为了方便控制,通常使用编码器来进行扫描。
三、实验步骤:1.搭建电路首先,在面包板上搭建Arduino开发板和LED点阵模块的连接线路。
将LED点阵的正极接到5V电源上,将负极接到Arduino开发板的GND上。
然后,将LED点阵的A、B、C等引脚分别连接到Arduino开发板的数字输出管脚上。
2.编写驱动程序在Arduino开发环境中,编写一个简单的程序来实现数字1在LED点阵上的显示。
3.上传程序将编写好的程序上传到Arduino开发板上。
四、实验结果及分析:通过实验,我们成功实现了数字1的显示。
在LED点阵上,部分LED灯亮起,显示出数字1的形状。
五、实验总结与心得体会:通过本次实验,我对LED点阵的原理和使用方法有了更深入的了解。
LED点阵作为一种常见的显示设备,可以广泛应用于各种信息展示的场合。
掌握了LED点阵的驱动方法,我们可以进一步实现数字、字符、图案等更复杂的显示功能。
六、实验存在的问题与改进方向:本次实验中,我们只实现了数字1的显示,未能涉及更多的显示内容。
下一步的改进方向可以是通过编写更复杂的程序,实现更多种类的数字和字符的显示,并且尝试实现图案显示。
此外,还可以了解更多关于LED点阵的驱动原理,尝试使用更多的编码方式和控制方法来驱动LED点阵。
点阵屏显示原理及实验详解讲解

点阵屏显示原理及实验详解讲解标题:LED点阵屏学习攻略共享资料LED点阵屏学习攻略在经历了将近一个学期断断续续的点阵屏学习后,最后终于在AVR平台下完成了128*32点阵屏的无闪烁显示。
现把整个学习过程总结如下:无论是51单片机还是AVR单片机,点阵屏的显示原理是一样的,所以首先从51讲起。
说明:以下所有试验如无特殊说明均在Keil uVision3 + Proteus 6.9 SP5下仿真完成。
一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:1.首先在Proteus下选择我们需要的元件,AT89C52、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。
在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE ,MATRIX-8*8-RED。
在这里请大家牢记:红色的为上列选下行选;其它颜色的为上行选下列选!而所有的点阵都是高电平选中列,低电平选中行!也就是说如果某一个点所处的行信号为低,列信号为高,则该点被点亮!此结论是我们编程的基础。
2.在选择完以上三个元件后,我们开始布线,具体如下图:这里P2是列选,P3连接38译码器后作为行选。
选择38译码器的原因:38译码器每次可输出相应一个I/O口的低电平,正好与点阵屏的低电平选中行相对,并且节省了I/O口,大大方便了我们的编程和以后的扩展。
3.下面让我们把它点亮,先看一个简单的程序:(将奇数行偶数列的点点亮,效果如下图)下面是源代码:/************8*8LED点阵屏显示*****************/#includevoid delay(int z) //延时函数{int x,y;for(x=0;x<z;x++)< p="">for(y=0;y<110;y++);}void main(){while(1){P3=0; //行选,选择第一行P2=0x55; //列选,即该行显示的数据delay(5); //延时/*****下同*****/P3=2; //第三行P2=0x55;delay(5);P3=4; //第五行P2=0x55;delay(5);P3=6; //第七行P2=0x55;delay(5);}}上面的程序实现了将此8*8点阵的奇数行偶数列的点点亮的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标题:LED点阵屏学习攻略共享资料LED点阵屏学习攻略在经历了将近一个学期断断续续的点阵屏学习后,最后终于在AVR平台下完成了128*32点阵屏的无闪烁显示。
现把整个学习过程总结如下:无论是51单片机还是AVR单片机,点阵屏的显示原理是一样的,所以首先从51讲起。
说明:以下所有试验如无特殊说明均在Keil uVision3 + Proteus 6.9 SP5下仿真完成。
一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:1.首先在Proteus下选择我们需要的元件,AT89C52、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。
在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE ,MATRIX-8*8-RED。
在这里请大家牢记:红色的为上列选下行选;其它颜色的为上行选下列选!而所有的点阵都是高电平选中列,低电平选中行!也就是说如果某一个点所处的行信号为低,列信号为高,则该点被点亮!此结论是我们编程的基础。
2.在选择完以上三个元件后,我们开始布线,具体如下图:这里P2是列选,P3连接38译码器后作为行选。
选择38译码器的原因:38译码器每次可输出相应一个I/O口的低电平,正好与点阵屏的低电平选中行相对,并且节省了I/O口,大大方便了我们的编程和以后的扩展。
3.下面让我们把它点亮,先看一个简单的程序:(将奇数行偶数列的点点亮,效果如下图)下面是源代码:/************8*8LED点阵屏显示*****************/#include<reg52.h>void delay(int z) //延时函数{int x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void main(){while(1){P3=0; //行选,选择第一行P2=0x55; //列选,即该行显示的数据delay(5); //延时/*****下同*****/P3=2; //第三行P2=0x55;delay(5);P3=4; //第五行P2=0x55;delay(5);P3=6; //第七行P2=0x55;delay(5);}}上面的程序实现了将此8*8点阵的奇数行偶数列的点点亮的功能。
重点让我们看while循环内,首先是行选P3=0,此时38译码器的输入端为000,则输出端为01111111,即B0端为低电平,此时选中了点阵屏的第一行,接着列选我们给P2口赋0x55,即01010101,此时又选中了偶数列,紧接着延时。
然后分别对第三、五、七行进行相同的列选。
这样就点亮了此点阵屏奇数行偶数列交叉的点。
完成这个程序,我们会发现其实点阵屏的原理是如此简单,和数码管的动态显示非常相似,只不过换了一种方式而已。
4.完成了上面的点亮过程,下面我们让这个8*8的点阵屏显示一个汉字:“明”先看效果图:源代码如下:/************8*8LED点阵屏显示*****************/#include<reg52.h>char code table[]={0x0f,0xe9,0xaf,0xe9,0xaf,0xa9,0xeb,0x11}; //"明" 字编码void delay(int z) //延时函数{int x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void main(){int num;while(1) //循环显示{for(num=0;num<8;num++) //8行扫描P3行选,P2列选{P3=num; //行选P2=table[num]; //列选delay(5); //延时}}}因为要显示一个汉字,这里我们使用了一个数组table[ ]来存储该字的编码,重点还是来看while循环,首先在for循环内完成对8*8点阵屏的8行依次扫描。
我们来分析第一行的情况即num=0的时候,首先P3=0,选中第一行,然后P2=table[0],即P2等于table数组中第一个数据0x0f,则此时就点亮了第一行相应的点。
接着延时,其他行同理。
这样我们就完成了一个最简单汉字的显示。
(2)16*16点阵的显示原理1.虽然完成了上面8*8点阵的显示,但是由于点的数量太少以至于它的显示效果并不是很理想,事实上现在大部分点阵的汉字都是16*16显示的,下面让我们来学习16*16点阵的显示。
和上面一样我们先选择元件:AT89C52,74LS138,,MATRIX-8*8-GREEN,因为要显示16*16的汉字,我们就不能再使用一个38译码器进行行选了,这里我们用两个38译码器组合成一个4选16的译码器(当然也可以使用74159)。
而MATRIX-8*8-GREEN点阵需要4个。
完成后如下图:2.先来看看4选16的译码器是如何工作的,这里有4个输入端a、b、c、d,16个输出端H0~H15,如上图连线后即可完成类似于38译码器一样的工作。
只不过扩展到了16行选。
关于连线的原理这里不再赘述,只要明白38译码器的原理这个可以轻松理解。
接着完成全部布线。
如下图所示:3.连好线后,P1作为行选,P2、P3一起作为列选。
现在16*16的点阵被分成两块并不完整的部分,我们可以整体移动(包括点阵屏、连线以及连接点,)来方便我们观察显示的效果(最好同时去掉仿真中电平的指示灯)。
接着我们来看一个程序,还是让此点阵屏显示一个汉字:“明”。
先看效果图:源代码如下:/************16*16LED点阵屏显示*****************/#include<reg52.h>char code table[]={0x00,0x20,0x20,0x7F,0x7E,0x21,0x22,0x21,0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,0x80,0x20,0x80,0x20,0x40,0x28,0x20,0x10}; // “明”void delay(int z){int x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void main(){int num;while(1){for(num=0;num<16;num++){P1=num; //行选P2=table[2*num]; //列选P3=table[2*num+1]; //列选delay(2);}}}4..先来看这次使用的table数组,因为是16*16的点阵,所以总共有32个数据,其中第1、2个数据用于第一行的显示,第2、3个数据用于第二行的显示,以此类推,总共16行。
然后还是来看while循环内,同样for循环依次扫描16行,以第一行为例,即num=0时,首先P1=0,选中第一行,P2=table[0]、P3=table[1]送出列选数据,即第一行要显示的两个字节的数据。
其他行同理。
这样很轻松的我们就完成了16*16点阵的显示。
程序虽然完成了,但是回过头来看一看就会发现,我们在这里使用了P2与P3口一起来做列选,浪费了大量的I/O/资源,而且现在点阵屏的大小还只有16*16,如果想要扩展的更大,已经没有足够的I/O口可用了。
所以一定要想出更好的办法进行列选。
5.为了解决上面提到的问题,我们来学习一个新的元件:74HC595。
它实质上是一个串行移位寄存器,能够实现“串入并出”的功能,关于它的使用我们还是用上一个列子来讲解,先来看看它的实现,如图:可以看到这里我们仅使用了三个I/O口就完成了列选数据的发送。
主要来看74HC595是如何实现“串入并出”的,这里我们使用了两个595进行了级联,即第二个595的数据输入端连接了第一个595的级联输出口Q7’。
也就是说,我们只需要从第一个595的输入端串行输入数据,便可以实现把数据送入第二个595的功能。
而且595的数量可以进行无限的级联,而不管有多少个595,我们只需要一个数据输入端就可以,这样就大大节省了I/O资源。
对于595的具体使用还是来看程序。
源代码如下:/************16*16LED点阵屏显示*****************/#include<reg52.h>sbit R="P2"^0; //数据输入端口sbit CLK="P2"^1; // 时钟信号sbit STB="P2"^2; // 锁存端char code table[]={0x00,0x20,0x20,0x7F,0x7E,0x21,0x22,0x21,0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,0x80,0x20,0x80,0x20,0x40,0x28,0x20,0x10}; // “明” void delay(int z){int x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void WriteByte(char dat) //写一个字节的数据{char i;for(i=0;i<8;i++) //循环8次把编码传给锁存器{dat=dat>>1; //右移一位,取出该字节的最低位R=CY; //将该字节的最低位传给RCLK=0; //将数据移入595,上升沿CLK=1;}}void main(){int num;while(1){for(num=0;num<16;num++){WriteByte(table[2*num]); //送出一个字节WriteByte(table[2*num+1]);P1=num; //行选STB=1; //输出锁存器中的数据,下降沿STB=0;delay(2);}}}先来看不同之处,这里我们首先位定义了R、CLK、STB,分别对应于74HC595的DS、SH_CP、ST_CP用以实现串行数据输入、数据移位以及并行数据输出。
然后来看WriteByte(char dat)函数,该函数实现了串行向595中输入一个字节数据的功能。
来看for循环,首先dat=dat>>1,把要输入的数据右移一位,这样最低位便进入移位寄存器CY中,紧接着我们让R=CY,把该位传给595的输入端,CLK一个上升沿的跳变就实现了把该位数据移入595的功能。