【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵


  • Proteus仿真演示
    在这里插入图片描述

取模软件和方式

  • pctolcd2002
  • 取模方式:逐列式、逆向、C51格式在这里插入图片描述

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//------------------------------------——
//名称:用75LS595与74LS154在16x16点阵屏上显示信息
//说明:本例综合使用了串入并出芯片75LS595,4-16译码器75LS154及
//反相放大器74LS06,在16x16点阵屏上实现了汉字滚动显示效果。
#include<reg51.h>
//#include <REGX52.H>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit Serial_Data_Pin = P0^0;//75LS595串行数据输入
sbit Shift_CLK_Pin = P3^7;//75LS595移位脉冲
sbit RCK_Pin = P0^1;//75LS595输出锁存器控制
sbit Switch_74LS154 = P3^6;//74LS154译码器开关

uchar data Bit_Stream_8[32];//发送给75LS595的位流,每片接收8位
uchar code Word_Set_OF_16x16[][32]=//待显示文字的点阵
{
{0xFF,0XFF,0x8F,0XF0,0x07,0XE0,0x77,0xEF,0x77,0xEF,0x07,0xE0,0x8F,0xF0,0xFF,0XFF,
0XFF,0XFF,0X0F,0xF0,0x07,0XE0,0xF7,0xEF,0XF7,0xEF,0X07,0xE0,0x0F,0XF0,0XEF,0XFF},//80

//{0XFF,0XFF,0x07,0XF6,0X07,0xE6,0x77,0XEF,0x77,0XEF,0x77,0XE0,0XF7,0XF0,0XFF,0XFF,
//0xFF,0XFF,0XEF,0XFF,0XEF,0XFF,0X07,0XE0,0x07,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF,0xFF},//51
{0xFF,0xFF,0x03,0xCE,0x03,0xCE,0x73,0xCE,0x73,0xCE,0x73,0xCE,0x73,0xCE,0x73,0xC0,
0x73,0xC0,0xFF,0xFF,0xFF,0xFF,0xEF,0xDF,0x03,0xC0,0x03,0xC0,0xFF,0xDF,0xFF,0xFF},//51

{0xFF,0xEF,0xFF,0xEF,0x07,0xEC,0xB6,0xED,0xB5,0xED,0xB3,0xED,0xB7,0xED,0x07,0x00,
0xB7,0xED,0xB3,0xED,0xB5,0xED,0xB6,0xED,0x07,0xEC,0xFF,0xEF,0xFF,0xEF,0xFF,0xFF},/\*"单",0\*/

{0xFF,0xFF,0xFF,0x7F,0xFF,0x9F,0x01,0xE0,0xDF,0xFD,0xDF,0xFD,0xDF,0xFD,0xDF,0xFD,
0xDF,0xFD,0xC0,0xFD,0xDF,0x01,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF},/\*"片",1\*/

{0xFF,0xFF,0xEF,0xF3,0x6F,0xFC,0x01,0x80,0x01,0x80,0x6F,0xBC,0xEF,0x9D,0xFF,0xC7,
0x03,0xF0,0xFB,0xFF,0xFB,0xFF,0x03,0xC0,0x03,0x80,0xFF,0xBF,0xFF,0x9F,0xFF,0xFF},/\*"机",2\*/

{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xF0,0x07,0xE0,0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,
0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,0xC3,0xC3,0xC3,0xE3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/\*"C",0\*/

{0xFF,0xFF,0xBF,0xFF,0xB9,0xFF,0x33,0x80,0xFF,0xE7,0x7F,0xF7,0x6D,0xFF,0x6D,0x03,
0x0D,0xBB,0x41,0xBB,0x6D,0xBB,0x6D,0xBB,0x0D,0xBB,0x0D,0x03,0x7D,0xFF,0xFF,0xFF},/\*"语",1\*/

{0xFF,0xFF,0xF7,0xFF,0xF7,0xFF,0xD7,0x82,0xD7,0xDA,0xD7,0xDA,0xD7,0xDA,0xD1,0xDA,
0xD7,0xDA,0xD7,0xDA,0xD7,0xDA,0xD7,0xDA,0xD7,0x82,0xF7,0xFF,0xF7,0xFF,0xFF,0xFF},/\*"言",2\*/

{0xBF,0xFB,0x8F,0xFB,0xCE,0xFB,0x68,0xFB,0x69,0xFB,0x6F,0xBB,0x6E,0x3B,0x68,0x01,
0x69,0x81,0x6F,0xF8,0x67,0xFA,0x63,0xFB,0xE8,0xFB,0xAC,0xFB,0x8F,0xFB,0xCF,0xFB},//学"

{0xFF,0xFF,0xFD,0xF7,0xFD,0xE7,0xFD,0xE7,0xED,0xF3,0xCD,0xFB,0x1D,0xFB,0x3D,0xF9,
0xFD,0xFD,0xFD,0xBC,0xFD,0x3E,0xFD,0x3E,0x01,0x80,0x01,0xC0,0xFF,0xFF,0xFF,0xFF},//习"

};

//延时
void Delay(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}

//向75LS595的串行输入引脚写入一字节
void Serial\_Input\_Pin(uchar Abyte)
{
uchar i;//
for(i=0;i<8;i++)
{
Abyte <<=1;
Serial_Data_Pin = CY;
Shift_CLK_Pin = 1;//上升沿移位i
\_nop\_();
\_nop\_();
Shift_CLK_Pin = 0;
}
}

//定时器0中断,在主程序中的延时期间以1ms的间隔动态显示每列数据
//所显示的数据由2片75LS595并行输出
void TO\_Led\_Display\_control() interrupt 1
{
uchar i;
TH0 = -1000/256; //1ms 定时
TL0 = -1000%256;
i=(P2+1)&0x0f; //当前列号加1,屏蔽高4位i=0~15
Serial\_Input\_Pin(Bit_Stream_8[i\*2 +1]);
Serial\_Input\_Pin(Bit_Stream_8[i\*2]);
Switch_74LS154 =1;//关闭译码器
RCK_Pin =1; //上升沿将数据送到输出锁存器
RCK_Pin =0; //锁存显示数据(2x8=16位)
Switch_74LS154 = 0;//打开译码器
P2=i;//列号译码(4-16)

}
void main()
{
uchar i,k;
TMOD = 0x01;//定时器T0工作方式1
TH0 = (65536-1000)/256; //1ms 定时
TL0= (65536-1000)%256;
IE = 0x82;//允许定时器T0中断
P2 = 0xFF;//行号端口初值
while(1)
{
for(k=0;k<10;k++)//显示12项内容
{
for(i= 0;i<32;i++)//将当前待显示内容放入Bit\_Stream.8
{
Bit_Stream_8[i]= Word_Set_OF_16x16[k][i];
TR0 = 1;
Delay(50);//在此期间由定时器中断显示信息
TR0 = 0;
P2 = 0XFF;
}
}
}
}




程序源码和仿真资源(包含取模工具)

本示例基于Proteus8.12平台.

1
2
3
链接:https://pan.baidu.com/s/1225O9hBMRh5LG\_T1Jr0-8w 
提取码:bsk2


生命可以归结为一种简单的选择。要么忙于生存,要么赶着去死。–电影·肖申克的救赎