点阵16*32综合C程序

发布者:MoonlightStar最新更新时间:2015-07-16 来源: 51hei关键字:点阵1  6*32 手机看文章 扫描二维码
随时随地手机看文章
点阵16*32综合(间断、上移、下移、左移、右移、左拉、右拉)C程序,硬件电路:行驱动74HC154+S8550三极管,列驱动74HC595,具体原理图祥见:http://www.51hei.com/mcu/1522.html 

具体视频效果祥见:http://www.tudou.com/programs/view/8qoTrWwtGzg/

程序代码下载:http://www.51hei.com/f/dz88.rar
#include
#define uchar unsigned char
#define uint unsigned int
#define LINE P0//定义行线IO口,即74HC154控制端
#define shudu 4//字移动的速度
sbit DATA=P1^4;//74HC595数据端
sbit CLK=P1^5;//74HC595移位脉冲端
sbit CLKR=P1^6;//74HC595数据锁存端
uchar move;//移动几位变量
uchar line,ji;//行变量
uint word;//字节变量
uchar BUF[6];//4组缓存数组以便动态更改数据
uchar code table[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x10,0x3F,0xF8,0x04,0x10,0x04,0x14,0xFF,0xFE,0x04,0x10,0x04,0x10,
0x3F,0xF0,0x04,0x10,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,
0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x00,0x3F,0xF8,0x01,0x00,0xFF,0xFE,0x00,0x10,
0x1F,0xF8,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x50,0x10,0x20,

0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,
0x10,0x10,0x1F,0xF0,0x10,0x10,0x01,0x10,0x28,0x88,0x24,0x44,0x44,0x44,0x00,0x00,
0x00,0x80,0xF8,0x80,0x88,0x80,0x97,0xFC,0xA1,0x00,0x91,0x40,0x8A,0x40,0x8F,0xFC,
0x88,0x40,0xA8,0x40,0x97,0xFE,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,

0x24,0x04,0x34,0x04,0x24,0x24,0x3F,0xA4,0x44,0x24,0x04,0x24,0x7F,0xA4,0x04,0x24,
0x3F,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x24,0x84,0x27,0x84,0x05,0x14,0x04,0x08,
0x08,0x80,0x0C,0x80,0x09,0x00,0x13,0xFE,0x12,0x80,0x34,0x88,0x50,0xFC,0x90,0x80,
0x10,0x80,0x10,0x84,0x10,0xFE,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,

0x00,0xA0,0x00,0x90,0x00,0x80,0x3F,0xFE,0x20,0x80,0x20,0x80,0x3E,0x88,0x22,0x8C,
0x22,0x48,0x22,0x50,0x22,0x20,0x2A,0x60,0x44,0x92,0x41,0x0A,0x86,0x06,0x00,0x02,
0x00,0x20,0x00,0x20,0x7F,0x20,0x08,0x20,0x0B,0xFC,0x08,0x24,0x08,0x24,0x08,0x44,
0x09,0x44,0x0E,0x44,0xF0,0x84,0x40,0x84,0x01,0x04,0x02,0x78,0x04,0x10,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};//字模数组
uchar code table1[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/* 当前所选字体下一个汉字对应的点阵为:  宽度x高度=32x16,  调整后为: 32x16*/
0x00,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x02,0x08,0x3F,0xF8,0x02,0x08,0x01,0x00,
0x7F,0xFE,0x1F,0xF0,0x02,0x08,0x01,0x00,0x02,0x08,0xFF,0xFE,0x3F,0xF8,0x00,0x00,
0x02,0x08,0x1F,0xF0,0x02,0x00,0x10,0x10,0x04,0x00,0x1F,0xF0,0x04,0x00,0x10,0x10,
0x08,0x00,0x1F,0xF0,0x10,0x00,0x10,0x10,0x20,0x00,0x10,0x50,0x40,0x00,0x10,0x20,

/*; 当前所选字体下一个汉字对应的点阵为:  宽度x高度=32x16,  调整后为: 32x16*/
0x01,0x00,0x00,0x80,0x01,0x00,0xF8,0x80,0x01,0xF8,0x88,0x80,0x01,0x00,0x97,0xFC,
0x01,0x10,0xA1,0x00,0x1F,0xF8,0x91,0x40,0x10,0x10,0x8A,0x40,0x10,0x10,0x8F,0xFC,
0x10,0x10,0x88,0x40,0x1F,0xF0,0xA8,0x40,0x10,0x10,0x97,0xFE,0x01,0x10,0x80,0x40,
0x28,0x88,0x80,0x40,0x24,0x44,0x80,0x40,0x44,0x44,0x80,0x40,0x00,0x00,0x80,0x40,

/*; 当前所选字体下一个汉字对应的点阵为:  宽度x高度=32x16,  调整后为: 32x16*/
0x24,0x04,0x08,0x80,0x34,0x04,0x0C,0x80,0x24,0x24,0x09,0x00,0x3F,0xA4,0x13,0xFE,
0x44,0x24,0x12,0x80,0x04,0x24,0x34,0x88,0x7F,0xA4,0x50,0xFC,0x04,0x24,0x90,0x80,
0x3F,0xA4,0x10,0x80,0x24,0xA4,0x10,0x84,0x24,0xA4,0x10,0xFE,0x24,0xA4,0x10,0x80,
0x24,0x84,0x10,0x80,0x27,0x84,0x10,0x80,0x05,0x14,0x10,0x80,0x04,0x08,0x10,0x80,
/*; 当前所选字体下一个汉字对应的点阵为:  宽度x高度=32x16,  调整后为: 32x16*/
0x00,0xA0,0x00,0x20,0x00,0x90,0x00,0x20,0x00,0x80,0x7F,0x20,0x3F,0xFE,0x08,0x20,
0x20,0x80,0x0B,0xFC,0x20,0x80,0x08,0x24,0x3E,0x88,0x08,0x24,0x22,0x8C,0x08,0x44,
0x22,0x48,0x09,0x44,0x22,0x50,0x0E,0x44,0x22,0x20,0xF0,0x84,0x2A,0x60,0x40,0x84,
0x44,0x92,0x01,0x04,0x41,0x0A,0x02,0x78,0x86,0x06,0x04,0x10,0x00,0x02,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
uchar code table2[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

 


/*; 当前所选字体下一个汉字对应的点阵为:  宽度x高度=32x16,  调整后为: 32x16*/
0x00,0xA0,0x00,0x20,0x00,0x90,0x00,0x20,0x00,0x80,0x7F,0x20,0x3F,0xFE,0x08,0x20,
0x20,0x80,0x0B,0xFC,0x20,0x80,0x08,0x24,0x3E,0x88,0x08,0x24,0x22,0x8C,0x08,0x44,
0x22,0x48,0x09,0x44,0x22,0x50,0x0E,0x44,0x22,0x20,0xF0,0x84,0x2A,0x60,0x40,0x84,
0x44,0x92,0x01,0x04,0x41,0x0A,0x02,0x78,0x86,0x06,0x04,0x10,0x00,0x02,0x00,0x00,

 

/*; 当前所选字体下一个汉字对应的点阵为:  宽度x高度=32x16,  调整后为: 32x16*/
0x24,0x04,0x08,0x80,0x34,0x04,0x0C,0x80,0x24,0x24,0x09,0x00,0x3F,0xA4,0x13,0xFE,
0x44,0x24,0x12,0x80,0x04,0x24,0x34,0x88,0x7F,0xA4,0x50,0xFC,0x04,0x24,0x90,0x80,
0x3F,0xA4,0x10,0x80,0x24,0xA4,0x10,0x84,0x24,0xA4,0x10,0xFE,0x24,0xA4,0x10,0x80,
0x24,0x84,0x10,0x80,0x27,0x84,0x10,0x80,0x05,0x14,0x10,0x80,0x04,0x08,0x10,0x80,

/*; 当前所选字体下一个汉字对应的点阵为:  宽度x高度=32x16,  调整后为: 32x16*/
0x01,0x00,0x00,0x80,0x01,0x00,0xF8,0x80,0x01,0xF8,0x88,0x80,0x01,0x00,0x97,0xFC,
0x01,0x10,0xA1,0x00,0x1F,0xF8,0x91,0x40,0x10,0x10,0x8A,0x40,0x10,0x10,0x8F,0xFC,
0x10,0x10,0x88,0x40,0x1F,0xF0,0xA8,0x40,0x10,0x10,0x97,0xFE,0x01,0x10,0x80,0x40,
0x28,0x88,0x80,0x40,0x24,0x44,0x80,0x40,0x44,0x44,0x80,0x40,0x00,0x00,0x80,0x40,

/* 当前所选字体下一个汉字对应的点阵为:  宽度x高度=32x16,  调整后为: 32x16*/
0x00,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x02,0x08,0x3F,0xF8,0x02,0x08,0x01,0x00,
0x7F,0xFE,0x1F,0xF0,0x02,0x08,0x01,0x00,0x02,0x08,0xFF,0xFE,0x3F,0xF8,0x00,0x00,
0x02,0x08,0x1F,0xF0,0x02,0x00,0x10,0x10,0x04,0x00,0x1F,0xF0,0x04,0x00,0x10,0x10,
0x08,0x00,0x1F,0xF0,0x10,0x00,0x10,0x10,0x20,0x00,0x10,0x50,0x40,0x00,0x10,0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/******************************************/
/***************延时子程序*****************/
/******************************************/
void delay(uchar z)
{
 uchar x,y;
 for(x=8;x>0;x--)
 for(y=z;y>0;y--);
}
/********************************/
/**74HC595移位寄存器送数子函数***/
/********************************/
void song(uchar z)//带参数函数
{
 uchar num,hang;//定义变量
 hang=z;//将形参给变量
 for(num=0;num<8;num++)//移动8次将数据发送完毕
 {
  if(hang&0x01==1)//将高7位屏蔽掉,保留最低位判断
  DATA=1;//为1就将74HC595数据端置1
  else 
  DATA=0;//否则给0
  CLK=0;//上升沿送走数据
  CLK=1;//高电平形成上升沿
  hang>>=1;//将数移走一位
 }
}[page]
/********************************/
/*装一线数据子函数(即一行数据)*/
/********************************/
void yixian()
{
 uchar s;
 for(s=0;s<3;s++)/*循环2次,得到第1个字(代码存在数组1与2中)
与第2个字(代码存在数组2与3中)的某一行数值*/
 {
  BUF[s*2]=table[word+(32*s)+(line*2)];//左半屏代码,line表示行数,word表示字数
  BUF[s*2+1]=table[word+(32*s+1)+(line*2)];//右半屏代码
 }
}

/*************************************************************************/
/*******************************间断子程序*********************************/
/*************************************************************************/
void jian()
{
 uchar j;
 while(word<80)//循环80次一个字16次即5*16
 {
  for(j=0;j<50;j++)//1个字显示的速度
  {
   ji=word;//将变量给它
   for(line=0;line<16;line++)//循环16次得到一整屏字
   {
    song(~table1[ji*4+3]);//发送第2个字右半屏数
    song(~table1[ji*4+2]);//发送第2个字左半屏的数
    song(~table1[ji*4+1]);//发送第1个右半屏的数
    song(~table1[ji*4]);//发送第1个字左半屏的数
    ji++;//接着发下一行
    CLKR=1;//在74HC595处锁存起来
    CLKR=0;
    CLKR=1;
    LINE=line;//打开行
    delay(10);
   }
  }
  word+=16;//显示下一个字
 }
}
/*************************************************************************/
/*******************************上移子程序*********************************/
/*************************************************************************/
void shang()
{
 uchar j;
 while(word<80)//循环80次一个字16次即5*16
 {
  for(j=0;j<10;j++)//1个字显示的速度
  {
   ji=word;//将变量给它
   for(line=0;line<16;line++)//循环16次得到一整屏字
   {
    song(~table1[ji*4+3]);//发送第2个字右半屏数
    song(~table1[ji*4+2]);//发送第2个字左半屏的数
    song(~table1[ji*4+1]);//发送第1个右半屏的数
    song(~table1[ji*4]);//发送第1个字左半屏的数
    ji++;//接着发下一行
    CLKR=1;//在74HC595处锁存起来
    CLKR=0;
    CLKR=1;
    LINE=line;//打开行
    delay(5);
   }
  }
  word+=1;//移一位形成上移
 }
}
/*************************************************************************/
/*******************************下移子程序*********************************/
/*************************************************************************/
void xia()
{
 uchar j;
 while(word>0)//循环80次一个字16次即5*16
 {
  for(j=0;j<10;j++)//1个字显示的速度
  {
   ji=word;//将变量给它
   for(line=0;line<16;line++)//循环16次得到一整屏字
   {
    song(~table2[ji*4+3]);//发送第2个字右半屏数
    song(~table2[ji*4+2]);//发送第2个字左半屏的数
    song(~table2[ji*4+1]);//发送第1个右半屏的数
    song(~table2[ji*4]);//发送第1个字左半屏的数
    ji++;//接着发下一行
    CLKR=1;//在74HC595处锁存起来
    CLKR=0;
    CLKR=1;
    LINE=line;//打开行
    delay(5);
   }
  }
  word-=1;//移一位形成上移
 }
}
/*************************************************************************/
/*******************************左移子程序*********************************/
/*************************************************************************/
/*将一行数据转换出来,然后显示*/
/********************************/
void yipai()
{
 uchar temp,yi;
 if(move<8)//处理移动次数小于8次的部分
 {
  yi=move;
  temp=(BUF[3]<>(8-yi));/*将第2个字的右半屏数左移yi次,
  然后或上第3个字左半屏的8-yi次数,注此句是处理第2个字右半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[2]<>(8-yi));/*将第2个字的左半屏数左移yi次,
  然后或上第2个字右半屏的8-yi次数,注此句是处理第2个字左半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[1]<>(8-yi));/*将第1个字的右半屏数左移yi次,
  然后或上第2个字左半屏的8-yi次数,注此句是处理第1个字右半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[0]<>(8-yi));/*将第1个字的左半屏数左移yi次,
  然后或上第1个字右半屏的8-yi次数,注此句是处理第1个字左半屏的数*/
  song(~temp);//发送给74HC595
 }
 else//处理移动次数小于8次以外的部分
 {
  yi=move-8;
  temp=(BUF[4]<>(8-yi));/*将第3个字的左半屏数左移yi次,
  然后或上第3个字右半屏的8-yi次数,注此句是处理第2个字右半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[3]<>(8-yi));/*将第2个字的右半屏数左移yi次,
  然后或上第3个字左半屏的8-yi次数,注此句是处理第2个字左半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[2]<>(8-yi));/*将第2个字的左半屏数左移yi次,
  然后或上第2个字右半屏的8-yi次数,注此句是处理第1个字右半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[1]<>(8-yi));/*将第1个字的右半屏数左移yi次,
  然后或上第2个字左半屏的8-yi次数,注此句是处理第1个字左半屏的数*/
  song(~temp);//发送给74HC595
 } 
}
void zou()
{
 uchar i;
 while(word<320)
 {
  for(move=0;move<16;move++)//要移多少位?
  {
   for(i=0;i    {
    for(line=0;line<16;line++)//扫描16次,即完成一个字的移动
    {
     yixian();//调用一线子程序
     yipai();//调用数据转换子程序
     LINE=line;//打开行线,即174HC154行线端
     CLKR=1;//在74HC595处锁存起来
     CLKR=0;
     CLKR=1;
    }
   }
  }
  word=word+32;//一个字显示完了,就显示下一个字
 }
}  

/*************************************************************************/
/*******************************右移子程序*********************************/
/*************************************************************************/
/*将一行数据转换出来,然后显示*/
/********************************/
void yipai2()
{
 uchar temp,yi;
 if(move<8)//处理移动次数小于8次的部分
 {
  yi=move;
  temp=(BUF[0]<<(8-yi))|(BUF[1]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[5]<<(8-yi))|(BUF[2]>>yi);
  song(~temp);//发送给74HC595
 }
 else//处理移动次数小于8次以外的部分
 {
  yi=move-8;
  temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[5]<<(8-yi))|(BUF[2]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[4]<<(8-yi))|(BUF[5]>>yi);
  song(~temp);//发送给74HC595
 } 
}
void you()
{
 uchar i;
 while(word<320)
 {
  for(move=0;move<16;move++)//要移多少位?
  {
   for(i=0;i    {
    for(line=0;line<16;line++)//扫描16次,即完成一个字的移动
    {
     yixian();//调用一线子程序
     yipai2();//调用数据转换子程序
     LINE=line;//打开行线,即174HC154行线端
     CLKR=1;//在74HC595处锁存起来
     CLKR=0;
     CLKR=1;
    }
   }
  }
  word=word+32;//一个字显示完了,就显示下一个字
 }
}[page]

/*************************************************************************/
/*******************************左拉子程序*********************************/
/*************************************************************************/
/*将一行数据转换出来,然后显示*/
/********************************/
void yipai3()
{
 uchar temp,yi;
 if(move<8)//处理移动次数小于8次的部分
 {
  yi=move;
  temp=(BUF[3]<>(8-yi));/*将第2个字的右半屏数左移yi次,
  然后或上第3个字左半屏的8-yi次数,注此句是处理第2个字右半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[2]<>(8-yi));/*将第2个字的左半屏数左移yi次,
  然后或上第2个字右半屏的8-yi次数,注此句是处理第2个字左半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[1]<>(8-yi));/*将第1个字的右半屏数左移yi次,
  然后或上第2个字左半屏的8-yi次数,注此句是处理第1个字右半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[0]<>(8-yi));/*将第1个字的左半屏数左移yi次,
  然后或上第1个字右半屏的8-yi次数,注此句是处理第1个字左半屏的数*/
  song(~temp);//发送给74HC595
 }
 else//处理移动次数小于8次以外的部分
 {
  yi=move-8;
  temp=(BUF[4]<>(8-yi));/*将第3个字的左半屏数左移yi次,
  然后或上第3个字右半屏的8-yi次数,注此句是处理第2个字右半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[3]<>(8-yi));/*将第2个字的右半屏数左移yi次,
  然后或上第3个字左半屏的8-yi次数,注此句是处理第2个字左半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[2]<>(8-yi));/*将第2个字的左半屏数左移yi次,
  然后或上第2个字右半屏的8-yi次数,注此句是处理第1个字右半屏的数*/
  song(~temp);//发送给74HC595
  temp=(BUF[1]<>(8-yi));/*将第1个字的右半屏数左移yi次,
  然后或上第2个字左半屏的8-yi次数,注此句是处理第1个字左半屏的数*/
  song(~temp);//发送给74HC595
 } 
}
/********************************/
/*******将一行数据显示出来*******/
/********************************/
void zou3()
{
 for(line=0;line<16;line++)//扫描16次,即完成一个字的移动
 {
  yixian();//调用一线子程序
  yipai3();//调用数据转换子程序
  LINE=line;//打开行线,即174HC154行线端
  CLKR=1;//在74HC595处锁存起来
  CLKR=0;
  CLKR=1;
 }
}
/********************************/
/*************左拉显示***********/
/********************************/
void zoula()
{
 uchar i,ii,k;
 while(word<320)//5个字*64=320
 {
  
  for(move=0;move<16;move++)//要移多少位?
  {
   for(i=0;i<2;i++)//一字移动的速度
   {
    zou3();//调用显示子程序
   }
  }
  ii++;//将变量加1
  if((ii%2)==0)//移完两个字才停下来
  {
   for(k=0;k<150;k++)//停下来时间
   zou3();//一行显示子程序
  }
  word=word+32;//一个字显示完了,就显示下一个字
 }
 i=0;//标志位清0
}
/*************************************************************************/
/*******************************右拉子程序*********************************/
/*************************************************************************/
/*将一行数据转换出来,然后显示*/
/********************************/
void yipai5()
{
 uchar temp,yi;
 if(move<8)//处理移动次数小于8次的部分
 {
  yi=move;
  temp=(BUF[0]<<(8-yi))|(BUF[1]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[5]<<(8-yi))|(BUF[2]>>yi);
  song(~temp);//发送给74HC595
 }
 else//处理移动次数小于8次以外的部分
 {
  yi=move-8;
  temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[5]<<(8-yi))|(BUF[2]>>yi);
  song(~temp);//发送给74HC595
  temp=(BUF[4]<<(8-yi))|(BUF[5]>>yi);
  song(~temp);//发送给74HC595
 } 
}
void yihang()
{
 for(line=0;line<16;line++)//扫描16次,即完成一个字的移动
 {
  yixian();//调用一线子程序
  yipai5();//调用数据转换子程序
  LINE=line;//打开行线,即174HC154行线端
  CLKR=1;//在74HC595处锁存起来
  CLKR=0;
  CLKR=1;
 }
}
void youla()
{
 uchar i,j,ii;
 while(word<320)
 {
  for(move=0;move<16;move++)//要移多少位?
  {
 
   for(ii=0;ii<2;ii++)//一字移动的速度
   {
    yihang();
   }
   
  }
  i++;
  if(i%2==0)
  { 
   for(j=0;j<150;j++)
   yihang(); 
  }
  word=word+32;//一个字显示完了,就显示下一个字
 }
}  
/********************************/
/************主程序*************/
/********************************/
void main()
{
 
 while(1)
 {
  word=0;
  jian();//间断
  word=0;
  shang();//上移
  word=80;
  xia();//下移
  word=0;
  zou();//左移 
  word=0;
  you();//右移
  word=0;
  zoula();//左拉
  word=0;
  youla();//右拉
 }
}   

关键字:点阵1  6*32 引用地址:点阵16*32综合C程序

上一篇:51单片机驱动点阵16*16左移
下一篇:数码管电子钟

推荐阅读最新更新时间:2024-03-16 14:25

基于stm32f103zet6的外部中断学习
一、关于中断中的结构体EXTI_InitTypeDef 原型:uint32_t EXTI_InitTypeDef::EXTI_Line { uint32_t EXTI_Line FunctionalState EXTI_LineCmd EXTIMode_TypeDef EXTI_Mode EXTITrigger_TypeDef EXTI_Trigger }含有4个成员 1、Specifies the EXTI lines to be enabled or disabled. This parameter can be any combination of EXTI_Lines EXTI_Lines的取值可以是下面的数字 #defi
[单片机]
6章 STM32F429工程模板建立(IAR8)
6.1 初学者重要提示 IAR的工程创建过程还是比较重要的,务必实际上手操作一遍。 6.2 第1步,创建工程文件夹 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。 Doc文件夹 用于记录例程的修改记录和例子简介。 Libraries文件夹 在第一章详细介绍从官网的下载方法。 Project文件夹 这个是本章的重点,在这个文件夹里面再建立两个文件夹,EWARMv8文件夹用于存放IAR工程,MDK-ARM(uV5)文件夹里面用于存放MDK工程,方便以后创建MDK的工程。 User文件夹 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面
[单片机]
第<font color='red'>6</font>章 STM<font color='red'>32</font>F429工程模板建立(IAR8)
STM32基于固件库学习笔记(6)使用DMA实现USART1发送数据
DMA简介 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。换而言之就是当外设有数据发送给mcu,此时可以使用DMA接收到用户定义空间(不占用cpu),接收完成在产生中断发给mcu(才占用CPU)反正一样。 当CPU和DMA同时访问相同的目标(RAM或外设)时,DMA请求会暂停CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。 两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设
[单片机]
STM<font color='red'>32</font>基于固件库学习笔记(<font color='red'>6</font>)使用DMA实现USART<font color='red'>1</font>发送数据
STM32入门学习之ADC(STM32F030F4P6基于CooCox IDE)
#include stm32_lib/inc/stm32f0xx_rcc.h #include stm32_lib/inc/stm32f0xx_adc.h #include stm32_lib/inc/stm32f0xx_gpio.h int main(void) { //时钟配置 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC IO配置,此处定义PA0口为ADC端口 GPIO_InitTypeDef PORT_ADC; PORT_AD
[单片机]
STM32F103C8T6 can端口映射
之前在网上找了一个STM32F103C8T6关于can通信的例子,直接烧录,can不能使用, 使用示波器在VP230前后端查看没有波形, 先介绍板子硬件资源: HSE时钟:8MHz; MCU : STM32F103C8T6 CAN:一路; 在软件的配置中找不到任何原因,使用USB-CAN分析仪不能识别波特率,怀疑是不是因为波特率设置不对, 是不是硬件设计出现错误, 查找手册 《stm32f103c8t6》 can的发送接收引脚是在PA11 PA12,(注意:can和其他的复用) 我找的那个程序,我把原理找到看了一下,can的发送接收是在 PB8 PB9,怀疑是我的板子硬件出错了, 我的板子硬件原理图上是PA11 PA1
[单片机]
STM<font color='red'>32</font>F103C8T<font color='red'>6</font> can端口映射
STM32F407ZGT6学习之基本定时器
工程代码:https://pan.baidu.com/s/1Qlfg1_br0tN6yy0fcDwCjg,密码:fhh2 (一)概述 STM32基本定时器实现基本的计时功能,通过相应的配置,实现微妙、毫秒级的定时和计数。 1、定时器框架 从图中可以看出,定时器时钟输入到定时器的触发控制器中,在通过 PSC预分频器“分频之后,周期性的使计数器CNT累加或者累减。当计算器CNT计算发生上溢或者下溢时,产生一个更新事件,标志一次计时周期到。 2、基本定时器的概念 2.1输入时钟频率 RCC的系统时钟为168M,而APB1总线上的时钟为系统时钟的1/4为42M,而当APB1总线上的时钟是由系统时钟多分频得到的时
[单片机]
STM<font color='red'>32</font>F407ZGT<font color='red'>6</font>学习之基本定时器
STM32开发笔记6: Nucleo-64开发板简介
单片机型号:Nucleo-64开发板 本文介绍Nucleo-64开发板。 1、特性 a、板载STM32 QFP64封装微处理器 b、2种类型的扩展资源:Arduino Uno V3 connectivity和ST morpho extension pin headers for full access to all STM32 I/Os c、ARM mbed支持 d、板载 ST-LINK/V2-1 e、USB、VBUS或扩展电源供电 f、3个LED:USB通讯、用户LED和电源LED g、2个按键:用户按键和复位键 h、USB可重新枚举,提供3个不同的
[单片机]
STM<font color='red'>32</font>开发笔记<font color='red'>6</font>: Nucleo-64开发板简介
基于STM32F103C8T6的音频显示设计
0. 开机默认音频模式,按下S1进入麦克风模式,输入电压DC12~24V。 1. 六种音频显示模式(4种频谱显示,2种时域显示),经扫频音乐测试; 2. 采样电路采用自动增益控制(AGC),性能大大提升。 3. 代码清晰结构清晰,绝非粗制滥造。 4. 默认256分频,当然也可以设置1024分频。 5. 256分频,里面频点通过软件进行了显示优化,不需要调节显示强度。 6. S1按键:打开或关闭麦克风,S2按键:切换显示模式,S3按键:去除显示落点,S4按键:强度调节(1024分频可用)。 7. 支持麦克风信号和音频信号输入显示。 8. 预留2路电机,2路UART,1个RTC芯片。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved