基于51单片机的8255芯片与74LS154结合实现16*16点阵扫描的设计
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:- #include <REG51.H>
- #include<intrins.h>
- #include "tou.h"
- sbit R_CLK = P3^5;
- sbit S_CLK = P3^6;
- sbit LS165_SH1=P2^5;
- sbit LS165_SH2=P2^2;
- sbit LS165_CLK=P2^3;
- sbit A0_8255 = P2^0;
- sbit A1_8255 = P2^1;
- sbit CS_8255=P2^4;
- sbit WR_8255=P3^3;
- sbit RD_8255=P3^7;
- sbit RST_8255=P1^4;
-
- void Init8255A(void)
- {
- uchar i;
- RST_8255 =1;
- for(i=0;i<255;i++);
- RST_8255 =0;
- CS_8255 = 1;
- WR_8255 = 1;
- RD_8255 = 1;
- CS_8255 = 0;
- A0_8255 = 1; //选择内部控制寄存器
- A1_8255 = 1;
- DATA = 0x80;
- WR_8255 = 0; //写入配置字
- WR_8255 = 1;
- CS_8255 = 1;
- }
- void HCR (uchar BT3, uchar BT2)
- {
- uchar i;
- A0_8255 = 0;
- A1_8255 = 0; //PA口位制寄存器
-
- CS_8255 = 0;
- DATA=BT2;
- WR_8255 = 0;
- _nop_();
- _nop_();
- _nop_();
- WR_8255 = 1;
-
- LS165_SH2=0;
- _nop_();
- LS165_SH2=1;
- CS_8255 = 1;
- A0_8255 = 1;
- A1_8255 = 0; //PB口位制寄存器
-
- CS_8255 = 0;
- DATA=BT3;
- WR_8255 = 0;
- _nop_();
- _nop_();
- _nop_();
- WR_8255 = 1;
- CS_8255 = 1;
- LS165_SH1=0;
- _nop_();
- LS165_SH1=1;
-
- for(i=0;i<16;i++)
- {
- LS165_CLK = 0;
- _nop_();
- LS165_CLK = 1;
- S_CLK = 0;
- S_CLK = 1;
- }
- for(i=0;i<15;i++)
- {
- S_CLK = 0;
- S_CLK = 1;
- }
- //--输出--//
- R_CLK = 0; //set dataline low
- R_CLK = 1;
- R_CLK = 0; //set dataline low
- }
复制代码
全部资料51hei下载地址:
用8255与74LS154设计的16×16点阵屏.zip
(215.73 KB, 下载次数: 44)
|