5981|13

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

怎么在keil51中写给595发送数据的程序啊?用C语言 汇编我不大懂 [复制链接]

本人最近手工做了一个16*16点阵显示屏 ,列驱动用的是74HC595  行驱用的是138译码 加4953驱动 、主控蕊片是 STC89C52RC 硬件连接方面用的是 P1.0做595的数据输入端接595的14脚  P1.1做595的锁存信号端接595的12脚 P1.2做595的时钟信号接595的11脚   138信号A,B,C 用的是P2口 。硬件连接完后 编程的时候难住了
本人在keil51编程中是很菜的菜鸟 。 595时钟的上升沿我是这样理解的 先置 P1.2 P1.0 为0 然后再置 1 不知对不对, P1.0传送数据的问题总想不出来.我看很多取字模软件上取到的字模是16进制。怎么把那些字模 通过P1.0口发送给595啊??
P1.0口一次只能传送一个数 而字模是8个数据 比如发送0X7F 我现在能做到的 把它变成{0,1,1,1,1,1,1,1}再一个个赋置给P1.0 有什么 更好的方法吗??请教各位大侠了
此帖出自编程基础论坛

最新回复

一个人学习单片机是难啊 没人指导 。。。可能会走些弯路 。。。不过本人这两天做了不少努力后 用了9楼所说的缓存显示功能 该显示屏 实现了左移效果 呵呵 还算有点收获  不过 显示屏上有些不该亮的点暗亮着。看着不太舒服。我想应该是 138  OE信号的问题 直接置低电平好像 不行。我会再发个贴来讨论下138 OE信号的处理问题。谢谢以上朋友对该贴的关注  详情 回复 发表于 2010-3-3 20:30
点赞 关注
 

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
串行->并行.都是这么弄..只能1bit 1clk的来...
16*16点数不多,,来的急 .
此帖出自编程基础论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
那样138信号要怎样编?我想知道个问题.
此帖出自编程基础论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
比如发送0X7F

第1位: 0X7F&0x01
第2位: 0X7F&0x02
第3位: 0X7F&0x04
第4位: 0X7F&0x08
第5位: 0X7F&0x10
第6位: 0X7F&0x20
第7位: 0X7F&0x40
第8位: 0X7F&0x80

此帖出自编程基础论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 

  1. /*******************************************************************/
  2. /*                                                                                                                                  */
  3. /* 74HC595 走马灯演示程序 */
  4. /*                                                                                                                                  */
  5. /* 邮箱: gguoqing@willar.com */
  6. /* 网站: http://www.willar.com                                      */
  7. /* 作者: gguoqing                                                                      */
  8. /* 时间: 2006/02/26                                                   */
  9. /*                                                                                                                                 */
  10. /*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED                    */
  11. /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!         */
  12. /*                                                                                 */
  13. /******************************************************************/
  14.    
  15. #include         //51芯片管脚定义头文件
  16. #include        //内部包含延时函数 _nop_();
  17. #define uchar unsigned char
  18. #define uint  unsigned int
  19. uchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  20. sbit  SDATA_595=P1^0;         //串行数据输入
  21. sbit  SCLK_595 =P1^1;          //移位时钟脉冲
  22. sbit  RCK_595  =P1^2;           //输出锁存器控制脉冲
  23. uchar temp;            
  24. /********************************************************/
  25. /*                                                                                                            */
  26. /* 延时子程序                                                                                            */
  27. /*                                                                                                            */
  28. /********************************************************/
  29. void delay(int ms)
  30. {                           
  31.    int k;
  32.    while(ms--)
  33.    {
  34.      for(k=0; k<250; k++)
  35.      {
  36.       _nop_();
  37.       _nop_();
  38.       _nop_();
  39.       _nop_();
  40.      }
  41.    }
  42. }
  43. /********************************************************/
  44. /*                                                                                                            */
  45. /*将显示数据送入74HC595内部移位寄存器                                                   */
  46. /*                                                                                                            */
  47. /********************************************************/
  48. void WR_595(void)
  49. {
  50.      uchar j;
  51.       for (j=0;j<8;j++)
  52.      {
  53.       temp=temp<<1;
  54.       SDATA_595=CY;
  55.       SCLK_595=1;                     //上升沿发生移位
  56.        _nop_();
  57.        _nop_();
  58.       SCLK_595=0;
  59.      }        
  60. }
  61. /********************************************************/
  62. /*                                                                                                            */
  63. /*将移位寄存器内的数据锁存到输出寄存器并显示                                             */
  64. /*                                                                                                            */
  65. /********************************************************/
  66. void OUT_595(void)
  67. {
  68.     RCK_595=0;
  69.     _nop_();
  70.     _nop_();
  71.     RCK_595=1;                       //上升沿将数据送到输出锁存器
  72.     _nop_();
  73.     _nop_();
  74.     _nop_();
  75.     RCK_595=0;
  76. }
  77. /********************************************************/
  78. *                                                                                                              */
  79. *  主程序                                                                                                   */
  80. *                                                                                                              */
  81. *********************************************************/
  82. main()
  83. {  
  84.    SCLK_595=0;
  85.    RCK_595=1;
  86.    
  87.    while(1)            
  88.     {
  89.       uchar i;
  90.       for (i=0; i<8; i++)
  91.        {
  92.         temp=DAT[i];         //取显示数据
  93.         WR_595();
  94.         OUT_595();
  95.         delay(100);
  96.        }
  97.     }
  98. }              

复制代码
此帖出自编程基础论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
上面4楼的程序我还没有验证 。先谢谢你的回答。  2楼所说的138信号 这个很好做啊   我用的P2口传送A,B,C三个信号 P20接138第一脚(A) P21接138第二脚(B) P22接138第三脚(C)  138第四脚片选 接地   第五脚OE直接接地 。硬件连接只用三个信号线就行了  在编程序里 直接用FOR循环给P2口赋总线数据(0————7)就行了( 不用位传送,用位传送更麻烦 )
此帖出自编程基础论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

7
 
嗯..谢谢楼主....................
此帖出自编程基础论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
SPI通信的器件,上升沿传送数据,上升沿锁存数据。
此帖出自编程基础论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

9
 
四楼的程序不错 感 谢!!!  经过这两天的努力 偶的显示屏终于显出几个字来了 ,还实现了上移效果 与翻页显示效果 。目前正循环显示着 26个英文大写字母与10个数字。呵呵  关于左移右移效果正在思考中…………本人的目标是实现左移与右移!!……有好的建议 请勇跃说出 。。。感谢
此帖出自编程基础论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
封装一个显示缓冲区吧

用一个模糊定时器来在数据更新的时候自动刷新这个缓冲

也可以把左右移功能封装到这个驱动里面
此帖出自编程基础论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

11
 
    我也在考虑这个缓存的功能 。就是不知道怎么实现  本人刚接触这个实验板一个多月。 我也是想着 显示屏理论上应该是 得有这么一个缓存显示空间 就是 显示屏的扫描程序 不停的扫描显示 要显示的数据 存于这个缓存中 第一次扫描到这个缓存地址内取出一屏要显示的点 。第二次扫描再取一屏这里的点  。在左移中这个缓存区要完成的功能就是  扫描第二屏的时候把第一屏的点全体向左位移一位再加上最后一列的点构成新一屏的点。脑袋中有这么一个模糊概念。不知想的对不对 ,如果不对请给我点解释。具体实现方法上 不知怎么做~~~~~~~
此帖出自编程基础论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

12
 
人生有不同的经历啊~~~!!!!如今执着的学单片机 不知道以后 又会去做什么 ~~看了那么多人的经历 “ 热烈讨论:* * *我从校园出来的这几年* * *,请大家进来随便说几句 http://topic.eeworld.net/t/20021029/12/1132251.html”  感慨中……  但我会坚持下去的
为了看到的那句话--"以后不用再吃更多的面条" 也为了将来更好的生活  努力 ……
此帖出自编程基础论坛
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 4 楼 galle 的回复:
C/C++ code/*******************************************************************//**//* 74HC595 走马灯演示程序*//**//* 邮箱: gguoqing@willar.com*//* 网站:http://www.willar.com*//* 作者: gguoqing*//* 时间: 2006/02/26*/?-
对头
此帖出自编程基础论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

14
 
一个人学习单片机是难啊 没人指导 。。。可能会走些弯路 。。。不过本人这两天做了不少努力后 用了9楼所说的缓存显示功能 该显示屏 实现了左移效果 呵呵 还算有点收获  不过 显示屏上有些不该亮的点暗亮着。看着不太舒服。我想应该是 138  OE信号的问题 直接置低电平好像 不行。我会再发个贴来讨论下138 OE信号的处理问题。谢谢以上朋友对该贴的关注
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表