标题: 单片机+8255与74LS154设计的16×16点阵屏程序+Proteus仿真 [打印本页]

作者: 壁花少年    时间: 2019-4-13 18:57
标题: 单片机+8255与74LS154设计的16×16点阵屏程序+Proteus仿真
基于51单片机的8255芯片与74LS154结合实现16*16点阵扫描的设计

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <REG51.H>
  2. #include<intrins.h>
  3. #include "tou.h"
  4. sbit R_CLK = P3^5;
  5. sbit S_CLK = P3^6;
  6. sbit LS165_SH1=P2^5;
  7. sbit LS165_SH2=P2^2;
  8. sbit LS165_CLK=P2^3;
  9. sbit A0_8255 = P2^0;
  10. sbit A1_8255 = P2^1;
  11. sbit CS_8255=P2^4;
  12. sbit WR_8255=P3^3;
  13. sbit RD_8255=P3^7;
  14. sbit RST_8255=P1^4;
  15.         
  16. void Init8255A(void)
  17. {
  18.         uchar i;
  19.         RST_8255 =1;
  20.         for(i=0;i<255;i++);
  21.         RST_8255 =0;

  22.         CS_8255 = 1;
  23.         WR_8255 = 1;
  24.         RD_8255 = 1;

  25.         CS_8255 = 0;   
  26.         A0_8255 = 1;     //选择内部控制寄存器
  27.         A1_8255 = 1;

  28.         DATA =  0x80;
  29.         WR_8255 = 0;    //写入配置字
  30.         WR_8255 = 1;
  31.         CS_8255 = 1;   
  32. }
  33. void HCR  (uchar BT3, uchar BT2)
  34. {  
  35.         uchar i;
  36.     A0_8255 = 0;
  37.     A1_8255 = 0;          //PA口位制寄存器
  38.               
  39.     CS_8255 = 0;
  40.     DATA=BT2;
  41.     WR_8255 = 0;
  42.         _nop_();
  43.         _nop_();
  44.         _nop_();
  45.     WR_8255 = 1;
  46.         
  47.         LS165_SH2=0;
  48.     _nop_();
  49.     LS165_SH2=1;
  50.     CS_8255 = 1;
  51.         A0_8255 = 1;
  52.     A1_8255 = 0;          //PB口位制寄存器
  53.             
  54.     CS_8255 = 0;
  55.     DATA=BT3;
  56.     WR_8255 = 0;
  57.         _nop_();
  58.         _nop_();
  59.         _nop_();
  60.     WR_8255 = 1;
  61.     CS_8255 = 1;
  62.         LS165_SH1=0;
  63.     _nop_();
  64.         LS165_SH1=1;
  65.                  
  66.         for(i=0;i<16;i++)
  67.     {
  68.                 LS165_CLK = 0;
  69.                  _nop_();
  70.                 LS165_CLK = 1;

  71.                 S_CLK = 0;
  72.                 S_CLK = 1;               
  73.            }
  74.         for(i=0;i<15;i++)
  75.         {
  76.                 S_CLK = 0;
  77.                 S_CLK = 1;               
  78.            }
  79.                 //--输出--//
  80.         R_CLK = 0; //set dataline low
  81.         R_CLK = 1;
  82.         R_CLK = 0; //set dataline low
  83. }
复制代码



全部资料51hei下载地址:
用8255与74LS154设计的16×16点阵屏.zip (215.73 KB, 下载次数: 44)





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1