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日 下午11:25
下一篇 2021年7月4日 下午11:25

相关推荐

  • 程序到底有多大

    从保存的程序文件属性里看,程序有29K,从编译的信息窗看,仅4K不到,为啥相差这么大? 最佳答案 程序文件保存的是程序的信息,包含了程序、结构、语言等很多,而编译后的文件变成了二进…

    SIMATIC S7-200 2020年11月1日
  • 如何安装标准指令库

    我把step7升级到v4.0+sp6后找不到西门子标准指令库了,重新下载,重新安装也没用,就是找不到标准指令库? 问题补充:西门子标准指令库是蓝色的。我在库指令里找不到。原来sp3…

    SIMATIC S7-200 2021年7月5日
  • EM277的数据格式

    我在看网上关于EM277模块的资料,是一个DP模块,它能发送接收到数据如图,我不理解,譬如发送32byte跟发送16word不是一样吗?假如我有一个VW20需要发送出去,那我选择2…

    2021年7月5日
  • SMARTs7200与两台设备做自由口通讯

    SMARTs7200与设备做自由口通讯,现在用中断做好一台了,如果是两台我如何做轮询,发送和接收,是如何做的呢,请高手们指教? 钻石用户推荐最佳答案 把两台设备设为不同站号,第一台…

    2021年7月5日
  • 200的458通讯问题

    200用0口读写485的表,走modbus通讯用的是库里的现成的块做的程序。 现在读写数据没有问题,就是在读写时间上有点问题,写不同的数据时,有的要用几秒来写下去这个值,…

    SIMATIC S7-200 2021年7月4日
  • s7_200程序上载问题??

    现有一通讯口坏了的s7_200CPU模块,手头有EM277,PPI 电缆,MPI 电缆 S7—315—2DP怎样从通讯口坏了的s7_200CPU模块上…

    SIMATIC S7-200 2021年7月5日
  • SMB31和SMW32永久保存指令在200 SMART里还有效吗?

    SMB31和SMW32永久保存指令在S7 200里可用,在200 SMART里还有效吗?手册里查不到啊。 问题补充:在200 SMART里,SMB31…

    SIMATIC S7-200 2021年7月5日
  • SSI仪表与PLC

    如何使用自由端口与SSI接口仪表建立通讯,读取仪表的数值? 最佳答案 自由口编程很方便:  1.选择自由口模式后,用户程序就可以完全控制通信端口的操作,通信协议…

    SIMATIC S7-200 2021年7月5日
  • 西门子触摸屏组态项目

    西门子触摸屏组态项目能由触摸屏设备上传到电脑吗? 问题补充:我们有两台触摸屏控制设备(相同的),其中一台触摸屏坏了,经修理后组态项目丢失,请问能不能把好的那一台的组态项目上传到电脑…

    SIMATIC S7-200 2020年11月1日
  • S7-200数据块的疑问

    s7-200CPU224XP,设备不是连续使用,当再次开机时,偶然的,某些设备出现数据块数据错误,比方“1”变成“2”,不知哪位遇到过类似问题?请指教,谢谢 问题补充:通过对变量赋…

    SIMATIC S7-200 2017年8月18日

发表回复

登录后才能评论