双色点阵心形

来源:互联网 发布:php用files上传照片 编辑:程序博客网 时间:2024/04/30 21:40
[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义  
  2. #include<intrins.h>  
  3. #define DataPort P0   
  4.   
  5. //unsigned char  segout[8]={0,1,2,3,4,5,6,7}; //8列  
  6. unsigned char  segout[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //8列  
  7. unsigned char  tab[]={0x0c,0x12,0x22,0x44,0x22,0x12,0x0c,0x00  
  8.                         //0x00,0x6C,0x92,0x82,0x44,0x28,0x10,0x00  
  9.                         };  
  10.   
  11. unsigned char  dofly_DuanMa[]={0x30,0x30,0x3f,0x3e,0x79,0x6e,0x3f,0x3e};//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 共阴显示段码值0~9  
  12. unsigned char  dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码  
  13. void Display(unsigned char FirstBit,unsigned char Num);  
  14. unsigned char TempData[8];  
  15.   
  16.   
  17. /*------------------------------------------------ 
  18.                 硬件端口定义 
  19. ------------------------------------------------*/  
  20. sbit LATCH1=P2^6;  
  21. sbit LATCH2=P2^7;  
  22.   
  23.   
  24. sbit LATCH = P1^0;   
  25. sbit SRCLK= P1^1;  
  26. sbit SER  = P1^2;  
  27.   
  28.   
  29. sbit LATCH_B = P2^2;  
  30. sbit SRCLK_B= P2^1;  
  31. sbit SER_B= P2^0;  
  32.   
  33. /*------------------------------------------------ 
  34.  uS延时函数,含有输入参数 unsigned char t,无返回值 
  35.  unsigned char 是定义无符号字符变量,其值的范围是 
  36.  0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 
  37.  长度如下 T=tx2+5 uS  
  38. ------------------------------------------------*/  
  39. void DelayUs2x(unsigned char t)  
  40. {     
  41.  while(--t);  
  42. }  
  43. /*------------------------------------------------ 
  44.  mS延时函数,含有输入参数 unsigned char t,无返回值 
  45.  unsigned char 是定义无符号字符变量,其值的范围是 
  46.  0~255 这里使用晶振12M,精确延时请使用汇编 
  47. ------------------------------------------------*/  
  48. void DelayMs(unsigned char t)  
  49. {  
  50.        
  51.  while(t--)  
  52.  {  
  53.      //大致延时1mS  
  54.      DelayUs2x(245);  
  55.      DelayUs2x(245);  
  56.  }  
  57. }  
  58. /*------------------------------------------------ 
  59.                 发送字节程序 
  60. ------------------------------------------------*/  
  61. void SendByte(unsigned char dat)  
  62. {      
  63.   unsigned char i;   
  64.           
  65.    for(i=0;i<8;i++)  
  66.         {  
  67.          SRCLK=0;  
  68.          SER=dat&0x80;  
  69.          dat<<=1;  
  70.            
  71.          SRCLK=1;  
  72.          }  
  73.            
  74. }  
  75. /*------------------------------------------------ 
  76.                 发送双字节程序 
  77.      595级联,n个595,就需要发送n字节后锁存 
  78. ------------------------------------------------*/  
  79. void Send2Byte(unsigned char dat1,unsigned char dat2)  
  80. {      
  81.    SendByte(dat1);  
  82.    SendByte(dat2);        
  83. }  
  84. /*------------------------------------------------ 
  85.                    595锁存程序 
  86.           595级联发送数据后,锁存有效 
  87. ------------------------------------------------*/  
  88. void Out595(void)  
  89. {  
  90.           
  91.         _nop_();  
  92.         LATCH=1;  
  93.         LATCH=0;  
  94. }  
  95.   
  96. /*------------------------------------------------ 
  97.                 发送位码字节程序 
  98.                使用另外一片单独595 
  99. ------------------------------------------------*/  
  100. void SendSeg(unsigned char dat)  
  101. {      
  102. unsigned char i;   
  103.           
  104.    for(i=0;i<8;i++)  //发送字节  
  105.         {  
  106.          SRCLK_B=0;  
  107.          SER_B=dat&0x80;  
  108.          dat<<=1;  
  109.          SRCLK_B=1;  
  110.          }  
  111.       LATCH_B=1;    //锁存  
  112.       _nop_();  
  113.       LATCH_B=0;  
  114.            
  115.            
  116. }  
  117. void Display(unsigned char FirstBit,unsigned char Num)  
  118. {  
  119.       static unsigned char i;  
  120.   
  121.       /*for(i=0;i<Num;i++) 
  122.       {*/  
  123.         DataPort= 0x00;   
  124.         LATCH1=1;      
  125.         LATCH1=0;  
  126.   
  127.         DataPort=dofly_WeiMa[i+FirstBit];  
  128.         LATCH2=1;      
  129.         LATCH2=0;  
  130.   
  131.         DataPort = dofly_DuanMa[i];//TempData[i];   
  132.         LATCH1=1;      
  133.         LATCH1=0;  
  134.   
  135.         /*DelayUs2x(200); 
  136.        }*/  
  137.        i++;  
  138.        if(i == Num)  
  139.             i = 0;  
  140. }  
  141. /*------------------------------------------------ 
  142.                    主程序 
  143. ------------------------------------------------*/  
  144.   
  145. void time0_isr(void) interrupt 1  
  146. {  
  147.     ET0 = 0;  
  148.   
  149.     TH0 = 0XFC;  
  150.     TL0 = 0X18;  
  151.       
  152.     Display(0,8);  
  153.   
  154.   
  155.     ET0 = 1;  
  156. }  
  157. void main()  
  158. {  
  159. unsigned char i,j;  
  160.     TMOD = 0X01;  
  161.     TH0 = 0XFC;  
  162.     TL0 = 0X18;  
  163.     EA = 1;  
  164.     ET0 = 1;  
  165.     TR0 = 1;  
  166.   
  167. while(1)  
  168. {  
  169.       
  170.             for(j=0;j<60;j++)  
  171.               for(i=0;i<8;i++) //8列显示  
  172.                   {  
  173.                      SendSeg(segout[i]);  
  174.   
  175.                      Send2Byte(~tab[i],0xff);  
  176.                      Out595();  
  177.                      DelayMs(1);  
  178.               
  179.                      Send2Byte(0xff,0xff);//delay(10); //防止重影  
  180.                      Out595();  
  181.                   }  
  182.               //另外一种颜色  
  183.            for(j=0;j<60;j++)  
  184.               for(i=0;i<8;i++) //8列显示  
  185.                   {  
  186.                      SendSeg(segout[7-i]); //反向显示同样图形  
  187.   
  188.                      Send2Byte(0xff,~tab[i]);  
  189.                      Out595();  
  190.                      DelayMs(1);               
  191.               
  192.                      Send2Byte(0xff,0xff);//delay(10); //防止重影  
  193.                      Out595();  
  194.                   }  
  195.             
  196.     }   
  197. }  
0 0
原创粉丝点击