练习

  1. /*-----------------------------------------------
  2.   名称:双色点阵
  3.   论坛:www.doflye.net
  4.   编写:shifang
  5.   修改:无
  6.   内容:使用hc595驱动双色点阵 
  7. ------------------------------------------------*/ 
  8. #include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 
  9. #include <intrins.h>  
  10.  
  11. //unsigned char  segout[8]={0,1,2,3,4,5,6,7}; //8列 
  12. unsigned char segout[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //8列 
  13. unsigned char code tab[]={ 
  14.                         0x06,0x08,0x11,0x21,0xC2,0x31,0x09,0x06 
  15.                         }; 
  16. /*------------------------------------------------
  17.                 硬件端口定义
  18. ------------------------------------------------*/ 
  19.  
  20. sbit LATCH = P1^0;  
  21. sbit SRCLK= P1^1; 
  22. sbit SER  = P1^2; 
  23.  
  24.  
  25. sbit LATCH_B = P2^2; 
  26. sbit SRCLK_B= P2^1; 
  27. sbit SER_B= P2^0; 
  28.  
  29. /*------------------------------------------------
  30. uS延时函数,含有输入参数 unsigned char t,无返回值
  31. unsigned char 是定义无符号字符变量,其值的范围是
  32. 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
  33. 长度如下 T=tx2+5 uS
  34. ------------------------------------------------*/ 
  35. void DelayUs2x(unsigned char t) 
  36. {    
  37. while(--t); 
  38. /*------------------------------------------------
  39. mS延时函数,含有输入参数 unsigned char t,无返回值
  40. unsigned char 是定义无符号字符变量,其值的范围是
  41. 0~255 这里使用晶振12M,精确延时请使用汇编
  42. ------------------------------------------------*/ 
  43. void DelayMs(unsigned char t) 
  44.       
  45. while(t--) 
  46.      //大致延时1mS 
  47.      DelayUs2x(245); 
  48.      DelayUs2x(245); 
  49. /*------------------------------------------------
  50.                 发送字节程序
  51. ------------------------------------------------*/ 
  52. void SendByte(unsigned char dat) 
  53. {     
  54.   unsigned char i;  
  55.          
  56.    for(i=0;i<8;i++) 
  57.         { 
  58.          SRCLK=0; 
  59.          SER=dat&0x80; 
  60.          dat<<=1; 
  61.           
  62.          SRCLK=1; 
  63.          } 
  64.           
  65. /*------------------------------------------------
  66.                 发送双字节程序
  67.      595级联,n个595,就需要发送n字节后锁存
  68. ------------------------------------------------*/ 
  69. void Send2Byte(unsigned char dat1,unsigned char dat2) 
  70. {     
  71.    SendByte(dat1); 
  72.    SendByte(dat2);       
  73. /*------------------------------------------------
  74.                    595锁存程序
  75.           595级联发送数据后,锁存有效
  76. ------------------------------------------------*/ 
  77. void Out595(void
  78.          
  79.         _nop_(); 
  80.         LATCH=1; 
  81.         LATCH=0; 
  82.  
  83. /*------------------------------------------------
  84.                 发送位码字节程序
  85.                使用另外一片单独595
  86. ------------------------------------------------*/ 
  87. void SendSeg(unsigned char dat) 
  88. {     
  89. unsigned char i;  
  90.          
  91.    for(i=0;i<8;i++)  //发送字节 
  92.         { 
  93.          SRCLK_B=0; 
  94.          SER_B=dat&0x80; 
  95.          dat<<=1; 
  96.          SRCLK_B=1; 
  97.          } 
  98.       LATCH_B=1;    //锁存 
  99.       _nop_(); 
  100.       LATCH_B=0; 
  101.           
  102.           
  103. /*------------------------------------------------
  104.                    主程序
  105. ------------------------------------------------*/ 
  106. void main() 
  107. unsigned char i,j; 
  108. while(1) 
  109.  
  110.             for(j=0;j<60;j++) 
  111.               for(i=0;i<8;i++) //8列显示 
  112.                   { 
  113.                      SendSeg(segout[i]); 
  114.  
  115.                      Send2Byte(~tab[i],0xff);//显示红色 
  116.                      Out595(); 
  117.                      DelayMs(1); 
  118.              
  119.                      Send2Byte(0xff,0xff);//delay(10); //防止重影 
  120.                      Out595(); 
  121.                   } 
  122.                   
  123.               //另外一种颜色 
  124.         /*   
  125.            for(j=0;j<60;j++)
  126.               for(i=0;i<8;i++) //8列显示
  127.                   {
  128.                      SendSeg(segout[7-i]); //反向显示同样图形
  129.                      Send2Byte(0xff,~tab[i]);//显示绿色
  130.                      Out595();
  131.                      DelayMs(1);
  132.            
  133.                      Send2Byte(0xff,0xff);//delay(10); //防止重影
  134.                      Out595();
  135.                   }
  136.                   */ 
  137.            
  138.     } 
  139. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值