1、基于74hc595和74hc138的点阵显示基于74hc595和74hc138的点阵显示基于74hc595和74hc138的16x40点阵显示 作者:廖基鑫 桂林电子科技大学 一、 电路原理图。 (1)输入输出口 JP1 为输入口,JP2为输出口(为串联下一块点阵),245为电平转换。 (2)行控制端电路 有2块3-8译码器组成4-16译码器。将A,B,C,D,接入一个8位I/O口,直接对I/O口赋值。 (3)行写入端电路 二、74HC595介绍。 74HC595 是一款漏极开路输出的CMOS 移位寄存器,输出端口为可控的三态输出 端,亦能串行输出控制下一级级联芯片。 10 脚 SCLR 移位
2、寄存器清零端 直接接地, 11 脚 SCK 数据输入时钟线 12 脚 RCK 输出存储器锁存时钟线 13 脚 OE 输出使能 低电平为输出有效 14 脚 SI 数据线 串行输入数据,亦能串行输出数据到下一级级联芯片 输入数据程序: 1. 向595写一个字节的数据 void write_595(uchar DATA) /向595写一个字节的数据 uchar i; for(i=0;i1; 2.向多个595写一个字节的数据 9 脚SQH 位串行数据输出管脚 将多个595的数据由9脚传至下一个595,全部写入后在打开输出存储器锁存时钟线 for(i=0;i0;j-) /向多个595写一个字节的数据 w
3、rite_595(display7k); write_595(display7k-1); write_595(display6k); write_595(display6k-1); write_595(display5k); write_595(display5k-1); write_595(display4k); write_595(display4k-1); k+=2; hang=16-j; /为138输入行控制数据 RCK=1;RCK=0; delay_ms(20); 3(595-RCK信号与138的输出使能E2信号为同一信号,故可以相连。 三、74hc138介绍。 3 线,8 线译码器
4、 当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B)为低电平时,将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。 利用 G1、/(G2A)和/(G2B)可级联扩展成24 线译码器;若外接一个反相器还可级联扩展成32 线译码器。 引出端符号: A、B、C 译码地址输入端 G1 选通端 /(G2A)、/(G2B) 选通端(低电平有效) Y0,Y7 译码输出端(低电平有效) 功能表: 逻辑图: 四、74hc245介绍。 管脚及电路接法。 五、ULN 2003介绍。 ULN2003是一个单片高电压、高电流的达林顿晶体管阵列集成电路。它是由7对NPN达林顿管组成的,
5、它的高电压输出特性和阴极箝位二极管可以转换感应负载。单个达林顿对的集电极电流是500mA。达林顿管并联可以承受更大的电流。此电路主要应用于继电器驱动器,字锤驱动器,灯驱动器,显示驱动器(LED气体放电),线路驱动器和逻辑缓冲器。 74hc595通过ULN2003驱动8*8LED点阵屏。 五、8*8点阵屏介绍 8*8点阵屏管脚如上,L1-L8由达林顿管TIP127驱动,H1-H8有ULN2003驱动 (1)TIP127简介 外延基PNP达林顿功率晶体管,采用TO-220塑料封装 VCBO 集电极-基极电压(IE = 0) 60 80 100 V VCEO 集电极-发射极电压(IB = 0) 60
6、 80 100 V VEBO 发射极-基极电压(IC = 0) 5 V IC 集电极电流 5 A ICM 集电极峰值电流 8 A IB 基极电流 0.1 A Ptot 耗散功率 Tcase?25? 65 W (2)ULN 2003介绍。 ULN2003是一个单片高电压、高电流的达林顿晶体管阵列集成电路。它是由7对NPN达林顿管组成的,它的高电压输出特性和阴极箝位二极管可以转换感应负载。单个达林顿对的集电极电流是500mA。达林顿管并联可以承受更大的电流。此电路主要应用于继电器驱动器,字锤驱动器,灯驱动器,显示驱动器(LED气体放电),线路驱动器和逻辑缓冲器。 74hc595通过ULN2003驱
7、动8*8LED点阵屏。 附录:原理图 源程序: /16x64点阵程序及滚动效果视频 #include #define uchar unsigned char #define uint unsigned int #define hang P1 /行扫描接在P1口 sbit SI=P23; sbit SCK=P20; sbit OE=P22; sbit RCK=P21; uint counter; uchar flag; void delay_ms(uchar z) /延时0.5秒 uchar i,j; for(i=z;i0;i-) for(j=120;j0;j-); uchar code dis
8、play32= /*- 文字: 好 -*/ /*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/ 0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40, /*- 文字: 好 -*/ /*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/ 0x10,0x00,0x11,0xFC,0x10,0x08,0x1
9、0,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40, /*- 文字: 学 -*/ /*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/ 0x01,0x08,0x10,0x8C,0x0C,0xC8,0x08,0x90,0x7F,0xFE,0x40,0x04,0x8F,0xE8,0x00,0x40,0x00,0x80,0x7F,0xFE,0x00,0x80,0x00,0x80,0x0
10、0,0x80,0x00,0x80,0x02,0x80,0x01,0x00, /*- 文字: 习 -*/ /*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/ 0x00,0x00,0x3F,0xFC,0x00,0x04,0x08,0x04,0x04,0x04,0x03,0x04,0x01,0x14,0x00,0x64,0x01,0x84,0x06,0x04,0x38,0x04,0x10,0x04,0x00,0x04,0x00,0x24,0x00,0x14,0x00,0x00, /*- 文字: 天 -*/ /*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/ 0x0
11、0,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x0E,0xC0,0x04, /*- 文字: 天 -*/ /*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/ 0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x80,0x0
12、2,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x0E,0xC0,0x04, /*- 文字: 向 -*/ /*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/ 0x02,0x00,0x04,0x00,0x08,0x04,0x7F,0xFE,0x40,0x04,0x40,0x24,0x4F,0xF4,0x48,0x24,0x48,0x24,0x48,0x24,0x48,0x24,0x4F,0xE4,0x48,0x24,0x40,0x04,0x40,0x14,0x40,0x08, /*- 文字: 上 -*/ /*- 宋体12
13、; 此字体下对应的点阵为:宽x高=16x16 -*/ 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x10,0x01,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00; void write_595(uchar DATA) /向595写一个字节的数据 uchar i; for(i=0;i1; void main() /主函数 uchar i,j,k; OE=0; /154使能 EA=1; /
14、开总中断 TMOD=0x01; /定时器0工作方式0 ET0=1; /定时器0使能 TH0=(65535-50000)/256; /定时器0设置初值 TL0=(65536-50000)%256; while(1) for(i=0;i0;j-) /向多个595写一个字节的数据 write_595(display7k); write_595(display7k-1); write_595(display6k); write_595(display6k-1); write_595(display5k); write_595(display5k-1); write_595(display4k); wr
15、ite_595(display4k-1); k+=2; hang=16-j; RCK=1;RCK=0; delay_ms(20); TR0=1;flag=1; while(flag) /停留一秒 uchar j; for(j=0;j0;i-) /字滚动出显示区 k=31; for(j=i-1;j0;j-) write_595(display7k); write_595(display7k-1); write_595(display6k); write_595(display6k-1); write_595(display5k); write_595(display5k-1); write_59
16、5(display4k); write_595(display4k-1); k-=2; hang=j; RCK=1;RCK=0; delay_ms(20); for(i=0;i0;j-) write_595(display3k); write_595(display3k-1); write_595(display2k); write_595(display2k-1); write_595(display1k); write_595(display1k-1); write_595(display0k); write_595(display0k-1); k+=2; hang=16-j; RCK=1
17、;RCK=0; delay_ms(20); TR0=1;flag=1; while(flag) /停留一秒 uchar j; for(j=0;j0;i-) /滚出显示区 k=31; for(j=i-1;j0;j-) write_595(display3k); write_595(display3k-1); write_595(display2k); write_595(display2k-1); write_595(display1k); write_595(display1k-1); write_595(display0k); write_595(display0k-1); k-=2; hang=j; RCK=1;RCK=0; delay_ms(20); void timer0() interrupt 1 /中断函数 counter+; if(counter=20) /1秒设置 counter=0; flag=0; TH0=(65535-50000)/256; TL0=(65536-50000)%256;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1