找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2262|回复: 0
打印 上一主题 下一主题
收起左侧

双色点阵沙漏图形显示源码

[复制链接]
跳转到指定楼层
楼主
ID:154175 发表于 2016-12-13 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下载:
双色点阵沙漏图形显示哦.zip (22.87 KB, 下载次数: 16)

  1.                                                                                        
  2. #include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  3. #include <intrins.h>

  4. //unsigned char  segout[8]={0,1,2,3,4,5,6,7}; //8列
  5. unsigned char  segout[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //8列
  6. unsigned char code tab[]={//沙漏流动图形表格
  7.                                        
  8.                                         //        0x81,0xC3,0xA5,0xD9,0xF9,0xE7,0xC3,0x81,
  9.                                                
  10.                                                 0xFF,0x7E,0x3C,0x18,0x18,0x24,0x42,0xFF,
  11.                                                 0xFF,0x76,0x3C,0x18,0x18,0x24,0x4A,0xFF,
  12.                                                 0xFF,0x66,0x3C,0x18,0x18,0x24,0x5A,0xFF,
  13.                                                 0xFF,0x46,0x3C,0x18,0x18,0x24,0x7A,0xFF,
  14.                                                 0xFF,0x42,0x3C,0x18,0x18,0x24,0x7E,0xFF,
  15.                                                 0xFF,0x42,0x34,0x18,0x18,0x2C,0x7E,0xFF,
  16.                                                 0xFF,0x42,0x24,0x18,0x18,0x3C,0x7E,0xFF,
  17.                                                 0x81,0xC3,0xA5,0x9B,0x9F,0xE7,0xC3,0x81


  18.                         };
  19. /*------------------------------------------------
  20.                 硬件端口定义
  21. ------------------------------------------------*/
  22. sbit LATCH = P1^0;
  23. sbit SRCLK= P1^1;
  24. sbit SER  = P1^2;


  25. sbit LATCH_B = P2^2;
  26. sbit SRCLK_B= P2^1;
  27. sbit SER_B= P2^0;

  28. /*------------------------------------------------
  29. uS延时函数,含有输入参数 unsigned char t,无返回值
  30. unsigned char 是定义无符号字符变量,其值的范围是
  31. 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
  32. 长度如下 T=tx2+5 uS
  33. ------------------------------------------------*/
  34. void DelayUs2x(unsigned char t)
  35. {   
  36. while(--t);
  37. }
  38. /*------------------------------------------------
  39. mS延时函数,含有输入参数 unsigned char t,无返回值
  40. unsigned char 是定义无符号字符变量,其值的范围是
  41. 0~255 这里使用晶振12M,精确延时请使用汇编
  42. ------------------------------------------------*/
  43. void DelayMs(unsigned char t)
  44. {
  45.      
  46. while(t--)
  47. {
  48.      //大致延时1mS
  49.      DelayUs2x(245);
  50.          DelayUs2x(245);
  51. }
  52. }
  53. /*------------------------------------------------
  54.                 发送字节程序
  55. ------------------------------------------------*/
  56. void SendByte(unsigned char dat)
  57. {   
  58.   unsigned char i;
  59.         
  60.    for(i=0;i<8;i++)
  61.         {
  62.          SRCLK=0;
  63.          SER=dat&0x80;
  64.          dat<<=1;
  65.          SRCLK=1;
  66.          }
  67.          
  68. }
  69. /*------------------------------------------------
  70.                 发送双字节程序
  71.      595级联,n个595,就需要发送n字节后锁存
  72. ------------------------------------------------*/
  73. void Send2Byte(unsigned char dat1,unsigned char dat2)
  74. {   
  75.    SendByte(dat1);
  76.    SendByte(dat2);      
  77. }
  78. /*------------------------------------------------
  79.                    595锁存程序
  80.                   595级联发送数据后,锁存有效
  81. ------------------------------------------------*/
  82. void Out595(void)
  83. {
  84.         LATCH=0;
  85.         _nop_();
  86.         LATCH=1;
  87. }

  88. /*------------------------------------------------
  89.                 发送位码字节程序
  90.                使用另外一片单独595
  91. ------------------------------------------------*/
  92. void SendSeg(unsigned char dat)
  93. {   
  94. unsigned char i;
  95.         
  96.    for(i=0;i<8;i++)  //发送字节
  97.         {
  98.          SRCLK_B=0;
  99.          SER_B=dat&0x80;
  100.          dat<<=1;
  101.          SRCLK_B=1;
  102.          }
  103.       LATCH_B=0;    //锁存
  104.       _nop_();
  105.       LATCH_B=1;
  106.          
  107.          
  108. }
  109. /*------------------------------------------------
  110.                    主程序
  111. ------------------------------------------------*/
  112. void main()
  113. {
  114. unsigned char i,j,k;

  115. while(1)
  116. {
  117.           for(j=0;j<8;j++)
  118.                     for(k=0;k<100;k++)//这个主要用于延时显示动画效果
  119.               for(i=0;i<8;i++) //8列显示
  120.                   {
  121.                      
  122.                                         SendSeg(segout[i]);
  123.                                          Send2Byte(~tab[i+j*8],0xff);
  124.                                          Out595();
  125.                      DelayMs(1);
  126.                                          Send2Byte(0xff,0xff); //防止重影
  127.                                          Out595();
  128.                   }
  129.        //另外一种颜色
  130.                  for(j=0;j<8;j++)
  131.                     for(k=0;k<40;k++)//这个主要用于延时显示动画效果
  132.               for(i=0;i<8;i++) //8列显示
  133.                   {
  134.                      
  135.                                         SendSeg(segout[i]);
  136.                                          Send2Byte(0xff,~tab[i+j*8]);
  137.                                          Out595();
  138.                      DelayMs(1);
  139.                                          Send2Byte(0xff,0xff); //防止重影
  140.                                          Out595();
  141.                   }
  142.                           for(j=0;j<8;j++)
  143.                     for(k=0;k<40;k++)//这个主要用于延时显示动画效果
  144.               for(i=0;i<8;i++) //8列显示
  145.                   {
  146.                      
  147.                                         SendSeg(segout[i]);
  148.                                          Send2Byte(~tab[i+j*8],~tab[i+j*8]);
  149.                                          Out595();
  150.                      DelayMs(1);
  151.                                          Send2Byte(0xff,0xff); //防止重影
  152.                                          Out595();
  153.                   }
  154.         }
  155. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表