双色点阵心形显示

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

//unsigned char  segout[8]={0,1,2,3,4,5,6,7}; //8列
unsigned char  segout[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //8列
unsigned char  tab[]={0x0c,0x12,0x22,0x44,0x22,0x12,0x0c,0x00
                        //0x00,0x6C,0x92,0x82,0x44,0x28,0x10,0x00
                        };

unsigned char  dofly_DuanMa[]={0x30,0x30,0x3f,0x3e,0x79,0x6e,0x3f,0x3e};//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 共阴显示段码值0~9
unsigned char  dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
void Display(unsigned char FirstBit,unsigned char Num);
unsigned char TempData[8];


/*------------------------------------------------
                硬件端口定义
------------------------------------------------*/
sbit LATCH1=P2^6;
sbit LATCH2=P2^7;


sbit LATCH = P1^0; 
sbit SRCLK= P1^1;
sbit SER  = P1^2;


sbit LATCH_B = P2^2;
sbit SRCLK_B= P2^1;
sbit SER_B= P2^0;

/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
	 DelayUs2x(245);
 }
}
/*------------------------------------------------
                发送字节程序
------------------------------------------------*/
void SendByte(unsigned char dat)
{    
  unsigned char i; 
        
   for(i=0;i<8;i++)
        {
         SRCLK=0;
         SER=dat&0x80;
         dat<<=1;
         
         SRCLK=1;
         }
         
}
/*------------------------------------------------
                发送双字节程序
     595级联,n个595,就需要发送n字节后锁存
------------------------------------------------*/
void Send2Byte(unsigned char dat1,unsigned char dat2)
{    
   SendByte(dat1);
   SendByte(dat2);      
}
/*------------------------------------------------
                   595锁存程序
		  595级联发送数据后,锁存有效
------------------------------------------------*/
void Out595(void)
{
        
        _nop_();
        LATCH=1;
        LATCH=0;
}

/*------------------------------------------------
                发送位码字节程序
               使用另外一片单独595
------------------------------------------------*/
void SendSeg(unsigned char dat)
{    
unsigned char i; 
        
   for(i=0;i<8;i++)  //发送字节
        {
         SRCLK_B=0;
         SER_B=dat&0x80;
         dat<<=1;
         SRCLK_B=1;
         }
      LATCH_B=1;    //锁存
      _nop_();
      LATCH_B=0;
         
         
}
void Display(unsigned char FirstBit,unsigned char Num)
{
      static unsigned char i;

	  /*for(i=0;i<Num;i++)
	  {*/
	  	DataPort= 0x00; 
      	LATCH1=1;    
      	LATCH1=0;

		DataPort=dofly_WeiMa[i+FirstBit];
      	LATCH2=1;    
      	LATCH2=0;

		DataPort = dofly_DuanMa[i];//TempData[i]; 
      	LATCH1=1;    
      	LATCH1=0;

		/*DelayUs2x(200);
       }*/
	   i++;
	   if(i == Num)
	   		i = 0;
}
/*------------------------------------------------
                   主程序
------------------------------------------------*/

void time0_isr(void) interrupt 1
{
	ET0 = 0;

   	TH0 = 0XFC;
	TL0 = 0X18;
	
	Display(0,8);


	ET0 = 1;
}
void main()
{
unsigned char i,j;
	TMOD = 0X01;
	TH0 = 0XFC;
	TL0 = 0X18;
	EA = 1;
	ET0 = 1;
	TR0 = 1;

while(1)
{
	
            for(j=0;j<60;j++)
              for(i=0;i<8;i++) //8列显示
                  {
                     SendSeg(segout[i]);

					 Send2Byte(~tab[i],0xff);
					 Out595();
                     DelayMs(1);
			
					 Send2Byte(0xff,0xff);//delay(10); //防止重影
					 Out595();
                  }
			  //另外一种颜色
		   for(j=0;j<60;j++)
              for(i=0;i<8;i++) //8列显示
                  {
                     SendSeg(segout[7-i]); //反向显示同样图形

					 Send2Byte(0xff,~tab[i]);
					 Out595();
                     DelayMs(1);			 
			
					 Send2Byte(0xff,0xff);//delay(10); //防止重影
					 Out595();
                  }
          
    } 
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值