S7-200驱动7219芯片

各位前辈,这几天自己在尝试用200的三个输出口驱动7219芯片的时候,发现没有任何反映:自己已经按照7219的时序向7219发送数据,也首先对控制寄存器初始化,然后发送点亮指示灯的信号,都是按照7219说明书上一步步执行的,但通过7219带的指示灯没有任何反映。并且自己查过几遍自己的接线没有问题。各位前辈,能否给小弟一些指导性的方法或指导性的小程序,让小弟有所领悟,谢谢。

最佳答案

先说7219的时序:在DIN引脚准备数据,然后在CLK引脚提供一个上升沿,在此过程中LOAD引脚必须保持低电平。发送数据时先送地址,再送数据。例如:你想在第二个数码管上显示数字8,应该先发送2,再发送8。下面是向7219发送数据的子程序:

 void write_7219(byte address, byte data)
 {
 //参数address是7219的寄存器地址,取值范围1到8,对应外接的8个数码管。参数data是要显示的数字。

 bit t ;
 _7219_CLK = 0;
 _7219_LOAD= 0;

 t = 1;
 MB1 = address; 
 // t=1时,把地址存入MB1。

 Loop:
 _7219_DIN = M1.7;
 _7219_CLK = 1;
 _7219_CLK = 1;
 _7219_CLK = 0;
 _7219_CLK = 0;//之所以重复两次,是为了拖延时钟信号变化的时间,因为plc的指令执行速度很快,7219可能捕捉不到。

 _7219_DIN = M1.6;
 _7219_CLK = 1;
 _7219_CLK = 1;
 _7219_CLK = 0;
 _7219_CLK = 0;

 _7219_DIN = M1.5;
 _7219_CLK = 1;
 _7219_CLK = 1;
 _7219_CLK = 0;
 _7219_CLK = 0;

 _7219_DIN = M1.4;
 _7219_CLK = 1;
 _7219_CLK = 1;
 _7219_CLK = 0;
 _7219_CLK = 0;

 _7219_DIN = M1.3;
 _7219_CLK = 1;
 _7219_CLK = 1;
 _7219_CLK = 0;
 _7219_CLK = 0;

 _7219_DIN = M1.2;
 _7219_CLK = 1;
 _7219_CLK = 1;
 _7219_CLK = 0;
 _7219_CLK = 0;

 _7219_DIN = M1.1;
 _7219_CLK = 1;
 _7219_CLK = 1;
 _7219_CLK = 0;
 _7219_CLK = 0;

 _7219_DIN = M1.0;
 _7219_CLK = 1;
 _7219_CLK = 1;
 _7219_CLK = 0;
 _7219_CLK = 0;

 if(t==1)
 { 
 t = 0;
 MB1 = data; //t=0时,把数据存入MB1
 goto Loop;  //跳转到上面的Loop标志处,把MB1再发送一遍。
 }
 EndLoop;

 _7219_LOAD = 1;
 _7219_CLK  = 0;
 _7219_CLK  = 1;
 _7219_CLK  = 0;

 } // write_7219 end

 下面是7219的初始化子程序,用来配置7219的寄存器:
 void init_7219( )
 {
 write_7219(0x0C,0x00);//停止7219的输出,以便配置寄存器
 write_7219(0x0a,0xff);      //最大亮度,也可以用硬件来调
 write_7219(0x09,0xff);      //模式设置,全部解码
 write_7219(1,0x0f); //blank
 write_7219(2,0x0f); //blank
 write_7219(3,0x0f); //blank
 write_7219(4,0x0f); //blank
 write_7219(5,0x0f); //blank
 write_7219(6,0x0f); //blank
 write_7219(7,0x0f); //blank
 write_7219(8,0x0f); //8个数码管全部blank
 write_7219(0x0C,0x0f);  //启动7219
 write_7219(0x0b,0x0f);   //扫描位数8,假设一共有8个数码管
 } 

 由于在7219的模式设置中开启了解码操作,所以只需把地址和字符传送给7219就行了,不需要分析字形。例如,你想在第二个数码管上显示数字8,可以这样调用:
 init_7219();
 write_7219(2,8);

 附带说一下,我没有做过这样的应用,所以上面的程序只是给个思路。

提问者对于答案的评价:
谢谢前辈的指导

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc347603.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日
下一篇 2021年7月4日

相关推荐

  • PLC编程软件问题

    请问大师们西门子plc1200与plc200的编程软件都通用吗?电脑是win7版本32位的适合安装哪款通用编程软件? 最佳答案 1、MICro/WIN是S7-200的编程软件,Wi…

    SIMATIC S7-200 2021年7月5日
  • 200PLC 模拟量输入 A/D转换后的数字量不准

    0–10V 模拟量输入到200PLC    外部输入 0–8V  区间 输入到PLC后…

    SIMATIC S7-200 2020年10月31日
  • S7 200的Modbus和USS通讯

    在224cn 系统中,使用modbus RTU 通讯时如果还需要用USS协议和变频器通讯,请教1)能否做到?2)能提供个参考方案吗?谢啦 问题补充:有…

    SIMATIC S7-200 2020年11月1日
  • 200怎么通过modbus采集下面数据发上来的CRC

    200怎么通过modbus采集下面数据发上来的CRC,我的意思是说下面单片机发上来的数据包含CRC校验,但是我在200程序里也做了CRC,能计算出下面的数据的CRC值,但是PLC-…

    SIMATIC S7-200 2021年7月5日
  • 关于S7-200 PLC通讯线缆的问题

    大家好!有一台S7-200. 214-1BD22-0XB0,有一九针编程口,可以用S7-300的线缆进行编程吗?如果不是,该电缆可以自制吗?谢谢大家的解答。 最佳答案 西…

    SIMATIC S7-200 2021年7月5日
  • EM253位控模块

    请教各位前辈  我做了一个程序是EM253控制伺服电机  要求伺服电机作正反相对运动  用定长GOTO指令 &…

    SIMATIC S7-200 2020年11月1日
  • S7200与LED显示屏的通信

    现想做一个PLC与LED显示屏通信的程序。选用的LED显示屏是上海仰邦,支持RS485协议。用PLC自带的modbus程序可以通信吗?还是需要自己编程通过自由口来通信呢?第一次做这…

    SIMATIC S7-200 2020年11月1日
  • 一个PLC 带二个触摸屏

    一个PLC 带二个触摸屏 。如采用总线,S7-200 加个EM277 ,二个屏相距100米。触摸屏直接接DP接口。是否可行。怎么设置通信呢?…

    SIMATIC S7-200 2020年11月1日
  • S7-200系模拟量存储问题

    目前做一个位移信号的采集实验我只需要一个AIW0作输入,采集200次模拟量,请问如何将200个模拟量方便地存入VW0到VW199里?请详细说明 最佳答案 首次更正一点:PLC一个模…

    SIMATIC S7-200 2020年10月31日
  • 方案编程请教高手,谢谢!

    一台电机通过机械传动的方式带动三条辊共同夹住一根粗木头旋转, 其中有一条辊上装有刀(刨刀 ,象在展开一卷纸一样)在均匀的削切木头,该辊在带动木头转的同时还受到另…

    SIMATIC S7-200 2021年7月5日

发表回复

登录后才能评论