点阵移动方法集锦
点阵屏的移动显示
点阵屏的移动显示/*--------16*16点阵屏的移动显示------------*/#include <reg51.h>#include <intrins.h>#define DATE_OUT P2 //指定P2口做为输出sbit DATA=DATE_OUT^0; //列数据输出位sbit SCLH=DATE_OUT^1; //列扫描时钟位sbit SCLT=DATE_OUT^2; //列数据锁存位sbit AB =DATE_OUT^3; //行数据输出位sbit SCK =DATE_OUT^4; //行扫描时钟位unsigned char date[32];//32字节RAM做为16*16点阵屏显示缓存void display();//做为点阵扫描函数,将显示缓存的数据输出到点阵屏void display_time(unsigned int timer); //指定时间扫描显示void displaymove(unsigned char *lp,unsigned char c,unsigned char timer);//显示汉字内容的移动效果,LP指向要显示第一个字的首地址,C表示显示字的个数,//timer是移动的速度void displaymovetb(unsigned char din,unsigned char *lp,unsigned char timer);//上下移动内容,din:1为向下,0为向上,lp指向要移入的内容,timer为移动速度void delay(unsigned int a);//延时子函数//非常好用的字摸软件PCtoLCD2002完美版字模选项:阴码、逐行式、顺向code unsigned char yu[32]={0x00,0x00,0x7E,0xFC,0x02,0x04,0x02,0x04,0x22,0x44,0x12,0x24,0x12,0x24,0x06,0x0 4,0x0A,0x14,0x12,0x24,0x62,0xC4,0x02,0x04,0x02,0x04,0x02,0x04,0x0A,0x14,0x04,0x 08/*"羽",0*/};code unsigned char yi[32]={0x7E,0xF8,0x12,0x48,0x0A,0x28,0x12,0x18,0x22,0x28,0x1F,0xF0,0x11,0x10,0x1F,0xF 0,0x11,0x10,0x1F,0xF0,0x08,0x20,0x7F,0xFC,0x08,0x20,0xFF,0xFE,0x18,0x30,0x60,0x0C /*"翼",0*/};code unsigned char dian[32]={0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x0 8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x02,0x01,0x02,0x00,0xFE,0x00,0x0 0/*"电",0*/};code unsigned char zi[32]={0x00,0x00,0x3F,0xF0,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x01,0x00,0x01,0x0 4,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x0 0/*"子",0*/};code unsigned char gong[32]={0x00,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x0 0,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x0 0/*"工",0*/};code unsigned char zuo[32]={0x08,0x80,0x0C,0x80,0x09,0x00,0x13,0xFE,0x12,0x80,0x34,0x88,0x50,0xFC,0x90,0x8 0,0x10,0x80,0x10,0x84,0x10,0xFE,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x8 0/*"作",1*/};code unsigned char shi[32]={0x02,0x00,0x01,0x00,0x3F,0xFE,0x20,0x04,0x40,0x08,0x3F,0xFC,0x04,0x00,0x08,0x20 ,0x1F,0xF0,0x01,0x10,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00 /*"室",2*/};void main(void) //主入口函数{unsigned char i=0,j=0;for(i=0;i<32;i++)date=yu;//将"羽"复制到显示缓存while(1){display_time(2); //显示约2秒displaymove(yi,6,7);//将从"翼"开始的六个汉字从右向左移动display_time(1); //等持约1秒displaymovetb(1,0,10); //将点阵上显示的内容向下以10的速度移出,补上0,即清空显示屏display_time(1); //等待1秒displaymovetb(0,yu,10); //将"羽"字以10的速度向上移动displaymovetb(0,yi,10); //将"翼"字以10的速度向上移动displaymovetb(0,dian,10); //将"电"字以10的速度向上移动displaymovetb(0,zi,10); //将"子"字以10的速度向上移动displaymovetb(0,gong,10); //将"工"字以10的速度向上移动displaymovetb(0,zuo,10); //将"作"字以10的速度向上移动displaymovetb(0,shi,10); //将"室"字以10的速度向上移动displaymovetb(0,0,10); //以10的速度向上清空display_time(1); //等待1秒displaymovetb(1,yu,10); //将"羽"字以10的速度向下移动}}void display()//显示{unsigned char i,ia,j,tmp; //定义变量DATE_OUT=0XFF; //置位高电平做准备AB=0; //将行数据位清0,准备移位for(i=0;i<16;i++){ //循环输出16行数据SCK=0; //为行移位做准备SCLT=0; //为列锁存做准备for(ia=2;ia>0;){ //每行16个点,循环位移两个字节ia--; //循环两次tmp=~date[i*2+ia]; //读取点阵数据做输出,这里用到ia目的是先读取点阵数据的第二位字节,因一行16个点由两个字节组成,//电路中的移位寄存器最后一位对应最后一列,所以要先输出一行中的第二个字节数据for(j=0;j<8;j++){ //循环两次,每次移一个字节,SCLH=0; //为列移位做准备DATA=tmp&0x01; //将数据低位做输出,由电路图可知,移位寄存器的最后一位对应最后一列,因此先移最后一位tmp>>=1; //将数据缓冲右移一位,为下次输出做准备SCLH=1; //将DATA上的数据移入寄存器} //移入单字节结束} //移入两个字节结束DATE_OUT|=0X14; //此句可以用以下两句来理解,如果不将两句合为一句,将出现拖影现像//SCK=1; //SCK拉高,行数据移位,相应行拉低,三极管导通输出电量到相应行点阵管阳极(共阳)//SCLT=1; //SCLT拉高,将数据锁存输出到相应列的点阵发光管显示,显示一行后将保持到下一行显示开始AB=1; //行数据位只在第一行时为0,其它时候都为1,当将这个0移入寄存器后,从第一位开始一直移位最后一位,//移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现,否则显示出乱}j=64;while(j--); //每一行的显示,保持了两字节的移位时间,因此,最后一行的显示,也要加入保持时间,补尝显示的亮度SCK=0; //SCK=1; //将最后一行数据移出}void display_time(unsigned int timer) //指定时间扫描显示{unsigned char i;while(timer--){ //当timer=1时,大约1秒时间i=130;while(i--)display();}}void displaymove(unsigned char *lp,unsigned char c,unsigned char timer)//显示汉字内容的移动效果,LP指向要显示第一个字的首地址,C表示显示字的个数,//timer是移动的速度{unsigned char i=0,j=0,ia=0;unsigned int tmp=0,timerc=0;unsigned char tmp2[16];c*=2; //因一个汉字由32字节组成,而移位显示,要分开半个汉字16字节处理,因此将这里乘以2for(i=0;i<16;i++)tmp2[1]=0; //将缓冲区清0,while(c){ //循环处理if(lp!=0){ //当lp指向的地址为0时,直接用组缓冲0补上,效果是将当前显示的内容移出tmp=c%2; //取余,目的是为了判断处理汉字的前半部份还是后半部份for(i=0;i<16;i++){tmp2=lp[i*2+tmp]; //取半个汉字点阵数据,16字节}if(tmp) //当tmp为1时,表时一个字数组处理完成,将地址转到下一个字lp+=32;}//--------------tmp=8; //变量再次利用while(tmp){ //循环8次,是将下一个字的前半部份的字节数据移入显示缓冲ia=0; //做为点阵数组的元素for(i=0;i<16;i++){//移动是16行同时移,因此要处理16个字节date[ia]<<=1; //移当前显示缓冲的前半行字节if(date[ia+1]&0x80) //判断后半行字节的高位是否为1,是移入前半行字节低位,否则不处理date[ia]++;ia++;date[ia]<<=1; //移当前显示缓冲的后半行字节if(tmp2&0x80) //判断下一个要显示汉字的前半行字节的高位是否为1,是移入,否则不处理date[ia]++;ia++;tmp2<<=1; //下一个要显示汉字的半行字节向高位移一位,准备下一次取位}tmp--;timerc=timer; //处理完16行,调用显示函数更新点阵while(timerc--) //循环做为处理的速度,即移动的速度display();}//----------c--; //移完一半,进入下一半或下一个汉字,直到结束}}void displaymovetb(unsigned char din,unsigned char *lp,unsigned char timer)//上下移动内容,din:1为向下,0为向上,lp指向要移入的内容,timer为移动速度{unsigned char i=0,j=0,ia=0;unsigned int tmp=0,timerc=0;if(din){ //判断移动方向,向下ia=32; //要移入第一个汉字的数组元素i=16; //行索引while(i--){ //逐行处理j=30;while(j){j--;date[j+2]=date[j]; //将上一行的内容复制到下一行,每两行内容相隔四个字节,复制15行}if(lp==0){ //最后一行的处理,判断移入的内容是否为空,是用0移入date[0]=0;date[1]=0;}else{ //否则,取字数组处理ia--;date[1]=lp[ia];ia--;date[0]=lp[ia];}timerc=timer; //处理完16行,调用显示函数更新点阵while(timerc--) //循环做为处理的速度,即移动的速度display();}}else{ //移动方向,向上ia=0; //向上移动,移入汉字从低位开始for(i=0;i<16;i++){ //处理16行for(j=0;j<30;j++) //将下一行的内容复制到上一行,每两行内容相隔四个字节,复制15行date[j]=date[j+2];if(lp==0){ //最后一行的处理,判断移入的内容是否为空,是用0移入date[30]=0;date[31]=0;}else{ //否则,取字数组处理date[30]=lp[ia];date[31]=lp[ia+1];ia+=2;}timerc=timer; //处理完16行,调用显示函数更新点阵while(timerc--) //循环做为处理的速度,即移动的速度display();}}}void delay(unsigned int a) //延时{while(a--);}。
点阵左移显示原理
点阵左移显示原理点阵左移显示是一种常见的显示技术,它通过依次改变点阵中的像素点的亮灭状态,从而实现图像或文字的左移显示效果。
这种显示原理广泛应用于LED显示屏、数码显示器、液晶显示屏等各种显示设备中。
点阵左移显示的原理可以简单描述为以下几个步骤:1. 初始化点阵:首先,需要初始化一个点阵图形,点阵是由一系列的像素点组成的矩阵,每个像素点可以表示亮或暗两种状态。
在左移显示之前,需要将点阵图形加载到显示设备的内存中。
2. 移动像素点:接下来,通过改变点阵中像素点的亮灭状态,实现图像或文字的左移显示效果。
通常,左移显示是通过逐列移动像素点来实现的。
首先,将第一列的像素点向左移动一位,然后将第二列的像素点向左移动一位,依次类推,直到将最后一列的像素点向左移动一位。
这样,整个点阵图形就向左移动了一列。
3. 刷新显示:左移显示过程中,需要不断地刷新显示设备的屏幕,以及时显示点阵图形的变化。
刷新显示可以通过改变像素点的亮灭状态来实现,当像素点从暗变为亮时,显示设备对应的像素点会显示出亮的状态;当像素点从亮变为暗时,显示设备对应的像素点会显示出暗的状态。
通过逐列移动像素点并及时刷新显示,就能够实现图像或文字的左移显示。
点阵左移显示原理的关键在于对像素点的控制。
在点阵中,每个像素点都有一个对应的控制电路,通过改变控制电路的状态,可以改变对应像素点的亮灭状态。
常见的控制电路有两种:共阳极(CA)和共阴极(CC)。
在共阳极的控制电路中,当控制电路为低电平时,对应像素点亮;当控制电路为高电平时,对应像素点暗。
而在共阴极的控制电路中,当控制电路为高电平时,对应像素点亮;当控制电路为低电平时,对应像素点暗。
通过控制每个像素点的控制电路,就可以实现点阵左移显示的效果。
点阵左移显示技术具有很多优点。
首先,它可以实现高度可视化的显示效果,使得图像或文字更加生动鲜明。
其次,它具有较低的成本和较高的可靠性,适用于各种规模和类型的显示设备。
点阵移动方法集锦
我的空间有程序,你去看看,有十几种移动方法屏幕点阵数的话也可以随时改动的/*************呈现各种显示效果的函数集****************/void flash_bai(uchar *flash_word,uchar flash_heard,uchar number,uchar sdu,uchar state){register uchar i,j,l;for(i=0;i<number;i++){for(j=0;j<16;j++){for(l=0;l<8;l++){if(j<8){dispram[l*4+1]=dispram[l*4+1]&0xff<<j|(flash_word[(flash_heard+i)*32+l*4]>>( 7-j));dispram[l*4+2]=dispram[l*4+2]&0xff>>j|(flash_word[(flash_heard+i)*32+l*4+3] <<(7-j)&0x10);}else{dispram[l*4]=dispram[l*4]&0xff<<(j-7)|flash_word[(flash_heard+i)*32+l*4]>>(15-j); dispram[l*4+1]=flash_word[(flash_heard+i)*32+l*4]<<(j-7)|(flash_word[(flash_h eard+i)*32+l*4+1]>>(15-j));dispram[l*4+2]=flash_word[(flash_heard+i)*32+l*4+2]<<(15-j)|(flash_word[(flas h_heard+i)*32+l*4+3]>>(j-7));dispram[l*4+3]=(dispram[l*4+3]&0xff>>(j-7))|flash_word[(flash_heard+i)*32+l* 4+3]<<(15-j);}}delay(sdu*SPEED);}delay(state*SPEED);}}/*******************霓虹灯效果************************/void flash(uchar *flash_word,uchar flash_heard,uchar number,uchar sdu,uchar state){register uchar i,j,k,l;for(i=0;i<number;i++){for(j=0;j<=16;j++){for(k=17;k>j;k--){for(l=0;l<16;l++){if(j>8){dispram[l*2]=1<<(8-k+j)|(flash_word[(flash_heard+i)*32+l*2]&0xff>>(16-j));dispram[l*2+1]=flash_word[(flash_heard+i)*32+l*2+1];}else{dispram[l*2]=1<<(8-k+j);dispram[l*2+1]=1<<(16-k+j)|(flash_word[(flash_heard+i)*32+l*2+1]&0xff>>(8-j) );}}delay(sdu*SPEED);}for(k=17;k>j;k--){for(l=0;l<16;l++){if(j>8){dispram[l*2]=1<<(k-8)|(flash_word[(flash_heard+i)*32+l*2]&0xff>>(16-j));}else{dispram[l*2]=1<<(k-8);dispram[l*2+1]=1<<k|(flash_word[(flash_heard+i)*32+l*2+1]&0xff>>(8-j));}}delay(sdu*SPEED);}}delay(state*SPEED);}}/*******************跳动的米奇*********************/void miqi_jump(void){register uchar jump_i;while((receive[1]&0x0f)<2)//{switch (timer/3650){case 0:for(jump_i=0;jump_i<16;jump_i++){dispram[jump_i*2] = word1[11][jump_i*2]<<1|word1[11][jump_i*2+1]>>7; dispram[jump_i*2+1] = word1[11][jump_i*2+1]<<1;//左移}break;case 1:for(jump_i=0;jump_i<15;jump_i++){dispram[jump_i*2+2] = word1[11][jump_i*2];dispram[jump_i*2+3] = word1[11][jump_i*2+1];}dispram[0] = 0;dispram[1] = 0;break;//下移case 2:for(jump_i=0;jump_i<16;jump_i++){dispram[jump_i*2+1] = word1[11][jump_i*2+1]>>1|word1[11][jump_i*2]<<7; dispram[jump_i*2] = word1[11][jump_i*2]>>1;}break;//右移case 3:for(jump_i=0;jump_i<15;jump_i++){dispram[jump_i*2] = word1[11][jump_i*2+2];dispram[jump_i*2+1] = word1[11][jump_i*2+3];}dispram[30] = 0;dispram[31] = 0;break;//上移case 4: for(jump_i=0;jump_i<15;jump_i++){dispram[jump_i*2+2] = word1[11][jump_i*2]<<1|word1[11][jump_i*2+1]>>7; dispram[jump_i*2+3] = word1[11][jump_i*2+1]<<1;//左移}dispram[0] = 0;dispram[1] = 0;break;//下移case 5: for(jump_i=0;jump_i<16;jump_i++){dispram[jump_i*2+1] =word1[11][jump_i*2+3]>>1|word1[11][jump_i*2+2]<<7;dispram[jump_i*2] = word1[11][jump_i*2+2]>>1;}dispram[30] = 0;dispram[31] = 0;break;//上移case 6: for(jump_i=0;jump_i<15;jump_i++){dispram[jump_i*2+3] = word1[11][jump_i*2+1]>>1|word1[11][jump_i*2]<<7; dispram[jump_i*2+2] = word1[11][jump_i*2]>>1;}dispram[0] = 0;dispram[1] = 0;break;case 7: for(jump_i=0;jump_i<16;jump_i++){dispram[jump_i*2] = word1[11][jump_i*2+2]<<1|word1[11][jump_i*2+3]>>7; dispram[jump_i*2+1] = word1[11][jump_i*2+3]<<1;//左移}dispram[30] = 0;dispram[31] = 0;break;default:for(jump_i=0;jump_i<32;jump_i++)dispram[jump_i] = word1[11][jump_i];}}}/********从wordsp的第OpenDheard个字开始开门效果显示number个字**********///用数组更加节省空间void Open_door(uchar wordsp[][32],uchar OpenDheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(k=0;k<number;k++){for(j=1;j<9;j++){for(i=0;i<16;i++){dispram[i*2]=dispram[i*2]&0xff<<j|wordsp[OpenDheard+k][2*i]&0xff>>(8-j); dispram[i*2+1]=dispram[i*2+1]&0xff>>j|wordsp[OpenDheard+k][1+2*i]&0xff<<( 8-j);}delay(sdu*SPEED);}delay(state*TIME);}}/********从wordsp的第CloseDheard个字开始关门效果显示number个字**********///用数组更加节省空间void Close_door(uchar wordsp[][32],uchar CloseDheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(k=0;k<number;k++){for(j=1;j<9;j++){for(i=0;i<16;i++){dispram[i*2]=dispram[i*2]&0xff>>j|wordsp[CloseDheard+k][2*i]&0xff<<(8-j); dispram[i*2+1]=dispram[i*2+1]&0xff<<j|wordsp[CloseDheard+k][1+2*i]&0xff>> (8-j);}delay(sdu*SPEED);}delay(state*TIME);}}/********从wordsp的第Far_Awayheard个字开始两边拉开显示number个字**********///用数组更加节省空间void Far_Away(uchar wordsp[][32],uchar Far_Awayheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(k=0;k<number;k++){for(j=1;j<9;j++){for(i=0;i<16;i++){dispram[i*2]=dispram[i*2]<<j|wordsp[Far_Awayheard+k][2*i]&0xff>>(8-j); dispram[i*2+1]=dispram[i*2+1]>>j|wordsp[Far_Awayheard+k][1+2*i]&0xff<<(8-j);}delay(sdu*SPEED);}delay(state*TIME);}}/********从wordsp的第Close_Toheard个字开始两边合拢显示number个字**********///用数组更加节省空间void Close_To(uchar wordsp[][32],uchar Close_Toheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(k=0;k<number;k++){for(j=1;j<9;j++){for(i=0;i<16;i++){dispram[i*2]=dispram[i*2]&0xff>>j|wordsp[Close_Toheard+k][2*i]<<(8-j); dispram[i*2+1]=dispram[i*2+1]&0xff<<j|wordsp[Close_Toheard+k][1+2*i]>>(8-j );}delay(sdu*SPEED);}delay(state*TIME);}}/****************卷帘出显示number个字***************///用指针更加节省空间void M_Words(uchar *wordsp,uchar MWheard,uchar number,uchar sdu,uchar state){register uchar i,j;for(j=0;j<number;j++)for(i=0;i<32;i++){dispram[i]=wordsp[(MWheard+j)*32+i];if(i%2)delay(sdu*SPEED);}delay(state*TIME);}}/************从UP_Pullp的第UP_Pullheard个字向上拉出number个字***************///用数组更加节约空间void UP_Pull_Word(uchar UP_Pullp[][32],uchar UP_Pullheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(i=0;i<number;i++){for(j=0;j<16;j++){for(k=0;k<15-j;k++){dispram[k*2]=dispram[(k+1)*2];dispram[k*2+1]=dispram[(k+1)*2+1];}dispram[30-2*j]=UP_Pullp[UP_Pullheard+i][(15-j)*2];dispram[31-2*j]=UP_Pullp[UP_Pullheard+i][(15-j)*2+1];delay(sdu*SPEED);}delay(state*TIME);}}/*********从UPp的第UPheard个字向上滚屏number个字***************/ //用数组更加节约空间void UP_Run_Word(uchar UPp[][32],uchar UPheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(i=0;i<number;i++){for(j=0;j<16;j++)for(k=0;k<15;k++){dispram[k*2]=dispram[(k+1)*2];dispram[k*2+1]=dispram[(k+1)*2+1];}dispram[30]=UPp[UPheard+i][j*2];dispram[31]=UPp[UPheard+i][j*2+1];delay(sdu*SPEED);}delay(state*TIME);}}/*********从Down_Pullp的第Down_Pullheard个字向下拉出number个字***************///用数组更加节约空间void Down_Pull_Word(uchar Down_Pullp[][32],uchar Down_Pullheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(i=0;i<number;i++){for(j=0;j<16;j++){for(k=15;k>j;k--){dispram[k*2]=dispram[(k-1)*2];dispram[k*2+1]=dispram[(k-1)*2+1];}dispram[2*j]=Down_Pullp[Down_Pullheard+i][2*j];dispram[2*j+1]=Down_Pullp[Down_Pullheard+i][2*j+1];delay(sdu*SPEED);}delay(state*TIME);}}/*********从Downp的第UPheard个字向下滚屏number个字***************/ //用指针更加节约空间void Down_Run_Word(uchar *Downp,uchar UPheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(i=0;i<number;i++){{for(k=15;k>0;k--){dispram[k*2]=dispram[(k-1)*2];dispram[k*2+1]=dispram[(k-1)*2+1];}dispram[0]=Downp[(UPheard+i)*32+(15-j)*2];dispram[1]=Downp[(UPheard+i)*32+(15-j)*2+1];delay(sdu*SPEED);}delay(state*TIME);}}/**********从LRp的第LRheard个字左移出显示number个字************///用指针更加节约空间void L_Removeout_Word(uchar *LRp,uchar LRheard,uchar number,uchar sdu,uchar state){register uchar i,j,k,l;for(i=0;i<number;i++){for(j=0;j<2;j++)for(k=0;k<8;k++){for(l=0;l<16;l++){dispram[l*2]=dispram[l*2]<<1|dispram[l*2+1]>>7;dispram[l*2+1]=dispram[l*2+1]<<1|LRp[(i+LRheard)*32+l*2+j]>>(7-k);}delay(sdu*SPEED);}delay(state*TIME);}}/**********从L_Pullp的第L_Pullheard个字左拉出显示number个字************/ //用指针更加节约空间void L_Pull_Word(uchar *L_Pullp,uchar L_Pullheard,uchar number,uchar sdu,uchar state){register uchar i,j,k,l;for(i=0;i<number;i++){for(j=0;j<2;j++){for(l=0;l<16;l++){if(j==0){dispram[l*2]=dispram[l*2]<<1|dispram[l*2+1]>>7;dispram[l*2+1]=(dispram[l*2+1]&0xff<<(k+1))<<1|L_Pullp[(i+L_Pullheard)*32+l *2+1]&0xff>>(7-k);}else{dispram[l*2]=(dispram[l*2]&0xff<<(k+1))<<1|L_Pullp[(i+L_Pullheard)*32+l*2]& 0xff>>(7-k);dispram[l*2+1]=L_Pullp[(i+L_Pullheard)*32+l*2+1];}}delay(sdu*SPEED);}delay(state*TIME);}}/****************卷帘出黑屏***************/void M_Black(void){register uchar i;for(i=0;i<32;i++){dispram[i]=0x00;if(i%2)delay(5*SPEED);}}/**********从RRp的第RRheard个字右移出显示number个字************///用指针更加节约空间void R_Removeout_Word(uchar *RRp,uchar RRheard,uchar number,uchar sdu,uchar state){register uchar i,j,k,l;for(i=0;i<number;i++){for(j=2;j>0;j--)for(k=0;k<8;k++){for(l=0;l<16;l++){dispram[l*2+1]=dispram[l*2+1]>>1|dispram[l*2]<<7;dispram[l*2]=dispram[l*2]>>1|RRp[(i+RRheard)*32+l*2+j-1]<<(7-k);}delay(sdu*SPEED);}delay(state*TIME);}}。
LED点阵移动
目录第一章设计内容和要求 (1)1.1总体设计要求 (1)1.2具体要求 (1)1.3方案 (1)第二章系统的硬件设计与实现 (2)2.1电路设计框图 (2)2.2系统硬件概述 (2)2.3主要电路的设计 (2)2.3.1AT89C52单片机 (2)第三章软件设计 (7)3.1字母数字编码 (7)3.2程序流程图 (9)第四章系统调试 (10)4.1硬件测试 (10)4.2软件测试 (10)第五章设计小结 (11)参考文献 (12)附录一元器件清单 (13)附录二程序清单 (14)附录三原理图 (16)附录四实物图 (17)设计任务书 (18)第一章设计内容和要求1.1总体设计要求本系统采用单片机AT89C52为LED显示屏的控制核心,制造一种简单的8×8显示屏,能够在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字稳定、清晰无串扰,图形或文字显示有静止、移入移出等显示方式。
本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
1.2具体要求1.运用单色或双色LED显示动态画面;2.运用单片机和LED字符显示器完成设计;3.焊接电路板;4.下载程序进行调试,完成报告.1.3方案本设计思路是:利用单片机对整个系统进行总体控制,进行显示所要显示的字符。
显示方式为:逐字滚动显示。
显示字模数据由单片机输入显存,点阵的点亮过程有程序控制,点阵采用单色显示,该显示器电路的特点是:点阵的动态显示过程占用时间比较短,亮度比较高。
根据设计要求,初步确定设计方案如下:1. 选择AT89C52单片机(晶振频率为f=11.0592MHZ)作为整个系统的核心器件,对整个系统进行总体控制,发送并时时处理系统信息。
2.通过编程滚动显示:“A B C 0 1 2 3 4 5 6 7 8 9”。
3. 扫描信号连接到单片机的P0口,显示信号连接到单片机的P2口。
4.点阵的点亮过程有程序控制,由驱动电路完成,点阵采用单色显示,其中驱动电路采共阴型高态扫描、高态显示信号的驱动电路。
16×16点阵汉字设计-左移-右移-翻页-上移-下移-多种方式
一、设计依据16x16点阵需要32个驱动,分别为16个列驱动及16个行驱动。
每个行与每个列可以选中一个发光管,共有256个发光管,采用动态驱动方式。
每次显示一行后再显示下一行。
本设计是利用实验仪上的16×16 LED点阵显示器,编写显示英文、汉字字符程序并进行显示,最好能移动显示。
要求在本设计过程中,通过设计合适的硬件电路及对应的软件,实现上述的控制过程,同时写出合格的课程设计说明书。
二、要求及主要内容1.硬件电路设计(1)完成89C51应用系统设计(晶振电路,上电复位电路等)(2)利用单片机I/O口或以扩展锁存器的方式控制点阵显示。
掌握单片机与16×16点阵块之间接口电路的设计方法。
2.程序设计掌握单片机与16×16点阵块之间接口电路的设计方法及编程要求完成主程序的设计及对应的子程序设计。
3.选芯片, 元件按设计连线4.完成子程序调试5.完成总调试三、途径和方法综合运用单片机和电子电路相关知识,实现本次设计。
进行程序设计时先画流程图再进行程序设计。
子程序调试按以下步骤进行:(1)实验板与PC机联机。
(2)利用实验系统16×16点阵实验单元,以两种方式控制点阵显示。
要求编制程序实现汉字点阵循环显示。
点阵时钟摘要LED点阵显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。
它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。
并广泛的应用于公交汽车,码头,商店,学校和银行等公共场合的信息发布和广告宣传。
LED显示屏经历了从单色,双色图文显示屏到现在的全彩色视频显示屏的发展过程,自20世纪八十年代开始,LED显示屏的应用领域已经遍布交通、电信、教育、证券、广告宣传等各方面。
LED点阵显示屏可以显示数字或符号,通常用来显示时间、速度、系统状态等。
文章给出了一种基于MCS-51单片机的16×16 点阵LED显示屏的设计方案。
单片机处理LED点阵书写屏图像拖移方法
的处 理 、对 圈 内图 像 坐标 点 的处 理 和 显 示 图像数 1 图像 圈定 点 的处 理 :把 圈上 的 点 按 照 行 )对
进 行排 序 ,取 出列 坐 标的最 大值 和最 小值 。
单片机 处理 图像拖移 的详 细方法 和相 关程序 ,该 程序结 构简 单 ,实用性 、可读 性强 ,可使 用 量大且不定 量的数据处 理编程 。
关键词 : 动态数组 ;指针 ;图像拖移 ;单片机 中图分类号 :T 3 2 1 P0 . 文献标识码 :A 文章编号 :1 0-0 ( 0 1 1 - -o3 -0 9 1 4 2 1 ) (I 0 3 ) l5 3
2 )对 圈 内图 像 坐 标 点 的处 理 :上 一 步取 出的
行 和列 坐 标 的最 大值 和 最小 值 可 以构成 一 个矩 形 , 把矩 形 内的地 址进 行坐 标化并 存入 数组 。
3 )显示 图 像 数 据移 动 :上 述两 步 执 行 后 ,光
笔触 及屏 上 的第一 点 (l 1 x ,y )定为基 准 点 ,第二 点 (2 2 x , )为 结 束 点 ,随 着光 笔移 动 ,而 前 面 被 y
睁 _ 叫 争 争 一 ∈
+
《 一— } @_ - 《 . — r . @一r 1 @ r 日 r {
@ @ @ ・@ — H { @ { @ r 『 r r 卜 @ @ @ ・@ 一0 }@ ‘ ・@ r 『 f r F
争 Ct 一 — —一■叫f — +l一 ④一 『 _ 粤 @
圈 中 的 点跟 随基 准 点移 动 ,当单 片机 处 理 速 度 比
LED点阵屏左移
//***********横向取模,左边为高位*****************
//***********每个汉字共32字节*********
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//*******************************以上字码用作黑屏**********************************
}
}
/*******************发送一行的子函数************************/
void sendoneline(void)
{char s;uchar inc;
if(col<8)inc=0;else inc=1;
for(s=0+inc;s<=15+inc;s++) //s=2*要显示的数字-1
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,
sbit temp10=temp1^0;
sbit temp11=temp1^1;
sbit temp12=temp1^2;
点阵的横向移动例题
点阵的横向移动例题题目:一个点阵的横向移动,相当于把点阵沿垂直方向复制一份并放在水平方向上,然后拿掉最左边的那份。
例如,对于点阵(1 2 3 4 5),横向移动1个单位后得到(2 3 4 5)。
现在给出一个长度为(2n+1) 的点阵,其中第(i) 个点在复平面上的坐标为((i, x_i)((i) 是下标,从0 开始))。
如果这个点阵经过若干次横向移动后能变为另一个点阵,那么这两个点阵的并集在复平面上形成的区域面积的最小值不小于(\frac{n^2}{4})。
给定两个长度为(2n+1) 的点阵,其中第(i) 个点在复平面上的坐标分别为((i, x_i) 和((i, y_i)。
我们需要证明这两个点阵的并集在复平面上形成的区域面积的最小值不小于(\frac{n^2}{4})。
证明:设两个点阵经过若干次横向移动后能变为同一个点阵,那么存在整数(k_1, k_2, \ldots, k_m)((m) 是某个自然数),使得对任意(i)((0 \leq i \leq 2n)),都有(x_{i+k_1} = y_{i+k_2})。
考虑任意一个长度为(n+1) 的子区间([a, b])((0 \leq a < b \leq n))。
由于(x_i = y_{i+k}) 对任意(i) 都成立,因此在这个子区间上,两个点阵的并集在复平面上形成的区域面积的最小值不小于(\frac{(b-a)^2}{4})。
对于任意两个不同的子区间([a_1, b_1]) 和([a_2,b_2]),如果它们没有公共的顶点,那么这两个子区间的并集在复平面上形成的区域面积的最小值不小于(\frac{(b_1-a_1)^2}{4} + \frac{(b_2-a_2)^2}{4})。
因此,对于任意长度为(n+1) 的子区间,都有对应的子区间的并集在复平面上形成的区域面积的最小值不小于(\frac{n^2}{4})。
所以,两个点阵的并集在复平面上形成的区域面积的最小值不小于(\frac{n^2}{4})。
点阵显示汉字滚动图解
点阵的汉字滚动实现其实很简单,用一句话概括就是:一边在行(列)上进行扫描,一遍循环依次取出显示代码输入到列(行)上。
以我们板上载有的8×8点阵为例,当要实现2个汉字的滚动时,我们把整个滚动的过程拆开,会发现每一次完整的滚动,点阵要显示2×8=16个状态。
我们可以把两个汉字的行(或列)扫描代码通过字模提取软件提出后保存在数组里,然后顺序循环的去取数组里的数据放到行(或列)上就可。
我们用图示来解析一下整个过程。
我们假设要显示两个汉字”人”和”天”的左右滚动。
首先我们假设在行和列的输入数据中,1代表亮,0代表灭。
数组code里保存好从字模软件中按行提取出来的扫描码,假设code[15]=A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7(A代表“人”字的列扫描码,B代表“天”字的列扫描码)思路是这样的:第1个时段T1:(完整的汉字“天”)时刻t0,R=0000_0001,L=A0,R0那一列显示;、时刻t1,R=0000_0010,L=A1,R1那一列显示;时刻t2,R=0000_0100,;L=A2,R2那一列显示;…….时刻t7,R=1000_0000,;L=A7,R7那一列显示;然后又回到时刻t0的扫描状态,循环扫描。
只要在这个T1时间段内按这样扫描的话,就形成了A0—A7所代表的数据,即汉字“人”第2个时段T2:(开始滚入“天”字)时刻t0,R=0000_0001,L=A1,R0那一列显示;、时刻t1,R=0000_0010,L=A2,R1那一列显示;时刻t2,R=0000_0100,L=A3,R2那一列显示;…….时刻t7,R=1000_0000,L=B0,R7那一列显示;“天”字第1列然后又回到时刻t0的扫描状态,循环扫描。
只要在这个T2时间段内按这样扫描的话,就形成了A1—A7和B0所代表的数据,如下图:第3个时段T3:时刻t0,R=0000_0001,L=A2,R0那一列显示;、时刻t1,R=0000_0010,L=A3,R1那一列显示;时刻t2,R=0000_0100,;L=A4,R2那一列显示;…….时刻t6,R=1000_0000,L=B0,R6那一列显示;“天”字第1列时刻t7,R=1000_0000,L=B1,R7那一列显示;“天”字第2列然后又回到时刻t0的扫描状态,循环扫描。
点阵规律解题方法及教案分享
点阵规律解题方法及教案分享随着我国教育事业的不断发展,教学方法也在不断地更新和完善。
在数学教学领域,也同样如此。
点阵规律作为数学教学的重要内容之一,有着广泛的应用场景和实际意义。
本文将简要介绍点阵规律及其解题方法,并分享一份点阵规律教案,以期对广大教育工作者和学生有所帮助。
一、点阵规律的概念与应用点阵规律指的是在一个格子图中,由图形或数字依据一定的规律所形成的一个图案。
点阵规律的研究可追溯到20世纪初,而它的应用场景则广泛存在于社会生活的各个方面中。
例如,点阵规律可用于图像处理、模式识别、信号处理等实际问题中。
除此之外,点阵规律也有着深刻的教育意义。
点阵规律的解题能力不仅锻炼了学生的观察能力、推理能力和创造力,而且也增强了学生的数学思维能力和解决实际问题的能力。
二、点阵规律的解题方法点阵规律的解题方法主要分为以下几种:1、寻找图形或数字的联系在点阵规律的图案中,往往存在着图形或数字之间的内在联系。
学生可以通过观察、比较图案,寻找图形或数字之间的规律和联系,从而得出下一步的图案或数字。
例如,在如下图案中,学生可以发现,头像依次向下移动,颜色依次改变,最后加上了礼物。
因此,下一步的图案应该是一个下移了的头像,颜色与上一步相同,并再次加上礼物。
2、拆分图形或数字在某些点阵规律中,图形或数字可以被拆分成若干个小部分,而这些小部分之间又存在着一定的规律。
学生可以通过拆分、比较图形或数字的各个部分,找到规律和联系。
例如,在如下图案中,学生可以发现,数字和符号组成了一个五角星形状,并且左边为奇数,右边为偶数。
因此,下一步的图案应该是由数字1、3、5和符号组成的五角星,左边为奇数,右边为偶数。
3、找到并延续重复的部分在某些点阵规律中,图形或数字的某一部分会重复出现,而这些部分之间又存在着一定的规律。
学生可以通过找到重复部分以及延续这些部分的规律,得出下一步的图案或数字。
例如,在如下图案中,学生可以发现,蓝色和红色分别占据了两个相邻的格子,并在重复出现。
16x16点阵显示汉字并移动原理图程序
16x16点阵显示汉字并移动原理与源程序(简单)周渴望南阳理工学院QQ6本次设计中首先在做了8x8点阵汉子显示基础之上做的,其实点阵原理很简单,就像数码管动态显示一样简单,只要你分清楚行控制,与列控制,某段时间某列可以点亮,哪几行亮,动态扫描一个循环自然组成不同的图像。
这里取模方式是先最左边的一列选通,然后控制控制两个74ls164分别点亮16行中的几行,然后是从左向右第二列依次下去,形成动态扫描。
本文程序非常简单,虽然没注释,认真看几十分钟就全明白了,说白了,数码管动态显示一回事(呵呵其实我自己做的时候下了不少功夫建议先做8x8)。
源程序:#include <reg52.h>unsigned char i;sbit DATA1=P3^7;sbit DATA2=P3^5;sbit CLCK1=P3^6;sbit CLCK2=P3^4;#define uchar unsigned char#define uint unsigned intvoid shuru_1();void shuru_2();unsigned char num,k,temp1,temp2,zuo=0;unsigned int timecount;unsigned char code lie[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, };/*74hc154显示代码从左到右16列依次选通*/unsigned char code hang[288]={0x00,0x00,0x00,0x00,0x1F,0xF8,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0xFF,0 xFE,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1F,0xF9,0x00,0x01,0x00,0x0F,0x00,0x00,/*"电",0*/0x01,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x02,0x41,0x01,0x47,0xFE,0x 45,0x00,0x49,0x00,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x01,0x00,0x00,0x00,/*"子",1*/ 0x00,0x00,0x00,0x42,0x44,0x44,0x4C,0xC8,0x54,0xD0,0x65,0x42,0x45,0x41,0x46,0x7E,0 x84,0x40,0x88,0x40,0x90,0x50,0x81,0x48,0x80,0xC4,0x00,0x62,0x00,0x00,0x00,0x00,/*"系",2*/0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x11,0x22,0x31,0x22,0x51,0x22,0x91,0x22,0x1 1,0x22,0x11,0x22,0x11,0x22,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"自",3*/ 0x02,0x08,0x22,0x3C,0x23,0xC8,0x22,0x08,0x22,0x28,0x22,0x1D,0x02,0x02,0x08,0x0C,0 x08,0x70,0xFF,0x80,0x08,0x02,0x08,0x01,0x08,0x02,0x0F,0xFC,0x00,0x00,0x00,0x00,/*"动",4*/0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x00,0x00,0x20,0x00,0x40,0x00,0x80,0x FF,0xFC,0x02,0x02,0x04,0x02,0x08,0x02,0x10,0x02,0x20,0x02,0x00,0x1E,0x00,0x00,/*"化",5*/ 0x00,0x08,0x00,0x08,0x1F,0xC8,0x92,0x48,0x52,0x48,0x32,0x48,0x12,0x48,0x1F,0xFF,0x 12,0x48,0x32,0x48,0x52,0x48,0x92,0x48,0x1F,0xC8,0x00,0x08,0x00,0x08,0x00,0x00,/*"单",6*/ 0x00,0x00,0x00,0x01,0x00,0x06,0x7F,0xF8,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x0 4,0x40,0xFC,0x40,0x04,0x7F,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,/*"片",7*/ 0x08,0x20,0x08,0xC0,0x0B,0x00,0xFF,0xFF,0x09,0x00,0x08,0xC1,0x00,0x06,0x7F,0xF8,0 x40,0x00,0x40,0x00,0x40,0x00,0x7F,0xFC,0x00,0x02,0x00,0x02,0x00,0x1E,0x00,0x00,/*"机",8*/};void shuru_1() /*74ls164进行输入数据*/{uchar t;for(t=0;t<8;t++){temp1<<=1;DATA1=CY;CLCK1=1;CLCK1=0;}}void shuru_2(){uchar t;for(t=0;t<8;t++){temp2<<=1;DATA2=CY;CLCK2=1;CLCK2=0;}}void main(void){TMOD=0x01;TH0=(65536-2000)/256;TL0=(65536-2000)%256;TR0=1;ET0=1;EA=1;while(1);}void serve_led()interrupt 1 using 0 /*定时中断显示*/{ k=2;TH0=(65536-2000)/256;TL0=(65536-2000)%256;P2=0xff;P2 = lie[num];temp1=hang[num*2+zuo]; /*num*2表示第一个74ls164只去第偶数个字节,跟我的取模方式有关*/shuru_1();P2 = lie[num];temp2=hang[zuo+(num*2+1)]; /*num*2+1表示第二个74ls164只去第奇数个字节,最左第一列16个不控制先发送第一个74ls164字节在发送第二个的字节*/ shuru_2();num++;if(num==16){num=0;}timecount++;if(timecount==100){ num=0;timecount=0;zuo=zuo+2; /*向后扫描加一列实现移动这里每次加二是因为要跳过第二个74ls164的代码前面已经说了取模方式是最左一列16个从上到下取得*/ if(zuo==272){zuo=0;}}}14年8月。
LED点阵的驱动方法
4. 色彩的还原性 色彩的还原性是指显示屏对色彩的还原性,既显示屏显示的 色彩要与播放源的色彩保持高度一致,这样才能保证图像的真 实感。 5. 有无马赛克、死点现象 马赛克是指显示屏上出现的常亮或常黑的小四方块,既模组 坏死现象,其主要原因为显示屏所采用的接插件质量不过关。 死点是指显示屏上出现的常亮或常黑的单个点,死点的多少主 要由管芯的好坏来决定。 6. 有无色块 色块是指相邻模组之间存在较明显的色差,颜色的过渡以模 块为单位了,引起色块现象主要是由控制系统较差,灰度等级 不高,扫描频率较低造成的。
什么是LED显示屏?
LED显示屏就是light emitting diode,发光二极管的 英文缩写,简称LED。它是一种通过控制半导体发光二极 管的显示方式。
LED显示屏的组成部分
LED显示屏由很多个通常是红色的发光二极管组成, 靠发光二极管的亮灭来显示字符。
LED显示屏的分类:
1、按颜色基色可以分为 单基色显示屏:单一颜色(红色或绿色)。 双基色显示屏:红和绿双基色,256级灰度、可以显示 65536种颜色。 全彩色显示屏:红、绿、蓝三基色,256级灰度的全彩色显 示屏可以显示一千六百多万种颜色。 2、按显示器件分类 LED数码显示屏:显示器件为7段码数码管,适于制作时钟 屏、利率屏等,显示数字的电子显示屏。 LED点阵图文显示屏:显示器件是由许多均匀排列的发光 二极管组成的点阵显示模块,适于播放文字、图像信息。 LED视频显示屏:显示器件是由许多发光二极管组成,可 以显示视频、动画等各种视频文件。
(1)采用进口LED优质管芯制作全彩显示屏:具有视角大、功耗小、色彩
均匀一致、屏厚超薄、屏体重量轻、故障率低、易维护等优势. (2)采用PCTV卡:该卡是一块性能卓越的集显示、采集、视频捕获等功能 的多媒体显示卡, (3)采用最新DVI 接口技术: DVI接口(Digital Visual Interface)是PC 机与数字式平板显示器(包括)接口的工业标准。 (4)采用室内全彩系统:该芯片除了完成显示数据的分配任务之外,其特 性是将接收的8位(8 bit)显示数据转换成12位的PWM输出脉冲,使显示屏 实现4096(12bit)级灰度控制 (5)采用恒流驱动:该电路技术成熟运行可靠,已经在全彩显示屏上广泛 的运用,性能价格比高,为目前众多公司常用的恒流驱动芯片,较好解决 LED管压降离散性之缺陷且性能良好,消除马赛克.
点阵 左移 上移 右移 下移 下拉 等花样显示讲解学习
点阵左移上移右移下移下拉等花样显示#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define sudu 20/***各种声明的声明*****/sbit LAT_port=P2^0;sbit CLK_port=P2^1;sbit DI_port=P2^2;sbit G_port=P2^3;sbit A_port=P2^4;sbit B_port=P2^5;sbit C_port=P2^6;sbit D_port=P2^7;uchar move; //上移下移用的全局变量uchar temp; //缓冲用的uchar han;uchar zi;uchar code ziku[]={0xFF,0xFF,0xC7,0xE3,0x83,0xC1,0x79,0x9E,0xFE,0x7F,0xFE,0x7F,0xFE,0x7 F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC,0x3F,0xF9,0x9F,0xE3,0xC7,0xC7,0xF1,0x1F,0xF C,0x7F,0xFE,/*"未命名文件",0*/0x7F,0xFF,0x7F,0xFF,0x01,0xC0,0x3F,0xFE,0x5F,0xFD,0x6F,0xFB,0x73,0xE 7,0x7C,0x9F,0x0F,0xF8,0xFF,0xFD,0xFF,0xFE,0x00,0x80,0x7F,0xFF,0x7F,0xFF,0x5F,0xF F,0xBF,0xFF,/*"李",0*/0xF7,0xF7,0x80,0x80,0xF7,0xF7,0xC1,0xC1,0xF7,0xF7,0x80,0x80,0xF7,0xF 7,0x03,0xE0,0xFF,0xEF,0x07,0xE0,0xFF,0xEF,0x03,0xE0,0x7F,0xFF,0xED,0xDE,0xED,0xB 7,0x1E,0xB0,/*"慧",1*/0xFF,0xFF,0x07,0xF0,0xF7,0xF7,0xF7,0xF7,0xB7,0xF7,0x77,0xF7,0x77,0xF 7,0xF7,0xF7,0x00,0x80,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFB,0xF7,0xFB,0xF7,0xFD,0xF 5,0xFE,0xFB,/*"丹",2*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,};uchar code ziku1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0xFF,0xFF,0x07,0xF0,0xF7,0xF7,0xF7,0xF7,0xB7,0xF7,0x77,0xF7,0x77,0xF 7,0xF7,0xF7,0x00,0x80,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFB,0xF7,0xFB,0xF7,0xFD,0xF 5,0xFE,0xFB,/*"丹",2*/0xF7,0xF7,0x80,0x80,0xF7,0xF7,0xC1,0xC1,0xF7,0xF7,0x80,0x80,0xF7,0xF 7,0x03,0xE0,0xFF,0xEF,0x07,0xE0,0xFF,0xEF,0x03,0xE0,0x7F,0xFF,0xED,0xDE,0xED,0xB 7,0x1E,0xB0,/*"慧",1*/0x7F,0xFF,0x7F,0xFF,0x01,0xC0,0x3F,0xFE,0x5F,0xFD,0x6F,0xFB,0x73,0xE 7,0x7C,0x9F,0x0F,0xF8,0xFF,0xFD,0xFF,0xFE,0x00,0x80,0x7F,0xFF,0x7F,0xFF,0x5F,0xF F,0xBF,0xFF,/*"李",0*/0xFF,0xFF,0xC7,0xE3,0x83,0xC1,0x79,0x9E,0xFE,0x7F,0xFE,0x7F,0xFE,0x7 F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC,0x3F,0xF9,0x9F,0xE3,0xC7,0xC7,0xF1,0x1F,0xF C,0x7F,0xFE,/*"未命名文件",0*/};uchar BUF[4];/***子函数申明****/void delay(uint t);void xie595(uchar dat);void hangxuan(uchar han);void huanchong();void zhuanhuanzuoyi();void zhuanhuanyouyi();/***延时****///void delay(uint t){while(t--) ;}/****595输入函数****///void xie595(uchar dat){uchar i;CLK_port=0;for(i=0;i<8;i++){if((dat&0x80)!=0)DI_port=1;elseDI_port=0;CLK_port=1; //上升沿输入数据CLK_port=0;dat<<=1;}}/*******行扫描程序*******///void hangxuan(uchar han){switch(han){case 0:A_port = 0; B_port = 0; C_port = 0;D_port = 0;break;case 1:A_port = 1; B_port = 0; C_port = 0;D_port = 0;break;case 2:A_port = 0; B_port = 1; C_port = 0;D_port = 0;break;case 3:A_port = 1; B_port = 1; C_port = 0;D_port = 0;break;case 4:A_port = 0; B_port = 0; C_port = 1;D_port = 0;break;case 5:A_port = 1; B_port = 0; C_port = 1;D_port = 0;break;case 6:A_port = 0; B_port = 1; C_port = 1;D_port = 0;break;case 7:A_port = 1; B_port = 1; C_port = 1;D_port = 0;break;case 8:A_port = 0; B_port = 0; C_port = 0;D_port = 1;break;case 9:A_port = 1; B_port = 0; C_port = 0;D_port = 1;break;case 10:A_port = 0; B_port = 1; C_port = 0;D_port = 1;break;case 11:A_port = 1; B_port = 1; C_port = 0;D_port = 1;break;case 12:A_port = 0; B_port = 0; C_port = 1;D_port = 1;break;case 13:A_port = 1; B_port = 0; C_port = 1;D_port = 1;break;case 14:A_port = 0; B_port = 1; C_port = 1;D_port = 1;break;case 15:A_port = 1; B_port = 1; C_port = 1;D_port = 1;break;}}/*****缓冲****************/void huanchong(){uchar i;for(i=0;i<2;i++){BUF[i*2+1]=ziku[zi*32+i*32+han*2+1]; //右半部分屏的数据BUF[i*2]=ziku[zi*32+i*32+han*2]; //左半部分屏数据}}/*********左右转换********/void zhuanhuanzuoyi() //向左子函数{uchar wy;if(move<8){wy=move;temp=((BUF[2]<<(8-wy))|(BUF[1]>>wy)); //右半屏的数据处理准备移动的屏左移(8-wy)位;看得见的右移wy位xie595(temp);temp=((BUF[1]<<(8-wy))|(BUF[0]>>wy)); //左半屏同上xie595(temp);}else{wy=(move-8);temp=((BUF[3]<<(8-wy))|(BUF[2]>>wy)); //同上xie595(temp);temp=((BUF[2]<<(8-wy))|(BUF[1]>>wy));xie595(temp);}}void zhuanhuanyouyi() //向右子函数统统同上方向改变{uchar wy;if(move<8){wy=move;temp=((BUF[0]>>(8-wy))|(BUF[1]<<wy));xie595(temp);temp=((BUF[3]>>(8-wy))|(BUF[0]<<wy));xie595(temp);}else{wy=(move-8);temp=((BUF[3]>>(8-wy))|(BUF[0]<<wy));xie595(temp);temp=((BUF[2]>>(8-wy))|(BUF[3]<<wy));xie595(temp);}}/***一般显示***********/void yiban(){zi=0;han=0;LAT_port=0; // 锁住595G_port=1; //138 不使能for(zi=0;zi<4;zi++) //多少个字循环多少次{uint i;for(i=0;i<2000;i++) //刷屏N 次{xie595(ziku[zi*32+han*2+1]);xie595(ziku[zi*32+han*2]);LAT_port=1;//上升沿595输出数据LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;//关屏han++;if(han==16)han=0;}}}/**********下拉******/void xiala(){uint i,j=0;uint k;zi=0;han=0;LAT_port=0;G_port=1;for(k=0;k<64;k++) //一个字要16 {for(i=0;i<sudu*15;i++) //{xie595(ziku[zi*32+han*2+1]); //先写高位xie595(ziku[zi*32+han*2]);LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;han++;if(han==16)han=0;if(han>j)han=0;}j++;if(j>15){G_port=1;j=0;delay(50000);zi++;if(zi==4)zi=0;}}}/*********上移***********/void shangyi(){uint i=0,j=0;uchar move=0;G_port=1;LAT_port=0;zi=0;han=0;for(j=0;j<(zi+1)*16;j++){for(i=0;i<(sudu*15);i++){xie595(ziku[zi*32+han*2+1+move*2]);//......xie595(ziku[zi*32+han*2+move*2]);LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;han++;if(han==16)han=0;}move++;if(move==16){move=0;zi++;if(zi==4)zi=0;}}}/*********下移***********/void xiayi(){uint i=0,j=0;uchar move=0;G_port=1;LAT_port=0;zi=4;han=0;for(j=0;j<(zi+2)*16;j++){for(i=0;i<(sudu*15);i++){xie595(ziku1[zi*32+han*2+1-move*2]);xie595(ziku1[zi*32+han*2-move*2]);LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;han++;if(han==16)han=0;}move++;if(move==16){move=0;zi--;if(zi<0)zi=4;}}}/*******左移***************/void zuoyi(){uchar i;LAT_port=0;G_port=1;zi=0;han=0;for(zi=0;zi<4;zi++){for(move=0;move<16;move++){for(i=0;i<sudu;i++){for(han=0;han<16;han++){huanchong();zhuanhuanzuoyi();LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;}}}}}/********右移**********/void youyi(){uchar i;LAT_port=0;G_port=1;zi=0;han=0;for(zi=0;zi<4;zi++){for(move=0;move<16;move++) //移动16次置0{for(i=0;i<sudu;i++){for(han=0;han<16;han++){huanchong();zhuanhuanyouyi();LAT_port=1;LAT_port=0;hangxuan(han);G_port=0;delay(30);G_port=1;}}}}}void main(){while(1){yiban();delay(30000);xiala();delay(30000);shangyi(); //各种调用delay(30000);xiayi();delay(30000);zuoyi();delay(30000);youyi();}}。
16 16点阵向上移动
16*16点阵ZSKZ1 EQU 50H ;字数控制1;字数控制251HEQUZSKZ2;一个字的字模控制52HYGZKZEQU53H ;每个字的字模控制EQUMGZKZ54H;行选缓存EQUHXHCEQU55H ;每个字显示时间MGZSJ00HORGSTARTSJMP30HORGSTART: MOV SP,#030HP0,#0 在本模块是1有效MOVMOV P1,#0STLOOP1:MOV DPTR,#TABMOVZSKZ1,#255 控制最后一个字,跳到第一个字的数字ZSKZ2,#2MOVSTLOOP2:MOV MGZSJ,#10STLOOP3:MOV MGZKZ,#00 每一个字都从第0位开始YGZKZ,#8 一个字的字模要重复8次MOVHXHC,#80H 行的控制缓存,1有效。
从上向下移动。
MOVSTLOOP4:LCALL SDXS 调用上部分扫描YGZKZ,STLOOP4DJNZYGZKZ,#8STLOOP5:MOVMOVHXHC,#80HSTLOOP6:LCALL XDXS 调用下部分扫描YGZKZ,STLOOP6DJNZMGZSJ,STLOOP3 每个字显示时间完后,DJNZINC DPTR 字向上移一位INC DPTRZSKZ1,STLOOP2DJNZZSKZ1,#95MOVZSKZ2,STLOOP2 判断是否到了最后一位DJNZSTLOOP1AJMP/***********上半部份*************/SDXS: PUSH ACCA,MGZKZ 把每个字的字模给AMOVA,@A+DPTR 查字模表MOVCMOV P2,A 从上而下把字模去完,0有效。
P0,HXHCMOVMGZKZ 字模加1INCA,MGZKZMOVA,@A+DPTRMOVCMOV P3,ADELAYLCALLMOV P0,#0A,HXHCMOVRR A 为下一行准备MOVHXHC,AMGZKZ 字模加1INCACCPOPRET/**********下半部分**************/XDXS: PUSH ACCA,MGZKZMOVA,@A+DPTRMOVCMOV P2,AMOVP1,HXHCMGZKZINCA,MGZKZMOVA,@A+DPTRMOVCMOV P3,ALCALLDELAYMOV P1,#0A,HXHCMOVRRAHXHC,AMOVMGZKZINCACCPOPRET/****************************/DELAY: MOV R7,#255DJNZR7,$RETTAB:;* @0 云(16x16,H)@ [suki software]*DB 0FFH,0FFH, 0FFH,0F3H, 003H,0E0H, 0FFH,0FFHDB 0FFH,0FFH, 0FFH,0CFH, 000H,080H, 03FH,0FFHDB 01FH,0FFH, 09FH,0FDH, 0CFH,0FBH, 0E7H,0F7H DB 073H,0E0H, 001H,0CFH, 0FBH,0EFH, 0FFH,0FFH ; * @1 南(16x16,H)@ [suki software]*DB 07FH,0FFH, 07FH,0DFH, 000H,080H, 07FH,0FFHDB 0BFH,0FFH, 003H,0C0H, 0DBH,0DBH, 0BBH,0DDH DB 00BH,0D0H, 07BH,0DFH, 003H,0C0H, 07BH,0DFH; * @2 省(16x16,H)@ [suki software]*DB 07FH,0FFH, 06FH,0F7H, 06FH,0EFH, 077H,0D7HDB 079H,0D9H, 07FH,0FEH, 09FH,0FFH, 003H,0E0HDB 0ECH,0EFH, 00FH,0E0H, 0EFH,0EFH, 00FH,0E0H DB 0EFH,0EFH, 0EFH,0EFH, 00FH,0E0H, 0EFH,0EFH ; * @3 电(16x16,H)@ [suki software]*DB 07FH,0FFH, 07FH,0FFH, 07FH,0FFH, 003H,0E0HDB 07BH,0EFH, 07BH,0EFH, 003H,0E0H, 07BH,0EFH DB 07BH,0EFH, 07BH,0EFH, 003H,0E0H, 07BH,0EFH DB 07FH,0BFH, 07FH,0BFH, 0FFH,080H, 0FFH,0FFH; * @4 子(16x16,H)@ [suki software]*DB 0FFH,0FFH, 003H,0F0H, 0FFH,0FBH, 0FFH,0FDH DB 0FFH,0FEH, 07FH,0FFH, 07FH,0FFH, 07FH,0DFH DB 000H,080H, 07FH,0FFH, 07FH,0FFH, 07FH,0FFHDB 07FH,0FFH, 07FH,0FFH, 05FH,0FFH, 0BFH,0FFH; * @5 信(16x16,H)@ [suki software]*DB 0EFH,0FEH, 0CFH,0F9H, 0E7H,0FDH, 017H,080H DB 0F3H,0FFH, 033H,0E0H, 0F5H,0FFH, 036H,0E0HDB 0F7H,0FFH, 037H,0E0H, 0B7H,0EFH, 0B7H,0EFH DB 0B7H,0EFH, 037H,0E0H, 0B7H,0EFH, 0FFH,0FFH ; * @6 息(16x16,H)@ [suki software]*DB 07FH,0FFH, 0BFH,0FFH, 007H,0F0H, 0F7H,0F7HDB 007H,0F0H, 0F7H,0F7H, 007H,0F0H, 0F7H,0F7HDB 007H,0F0H, 0FFH,0FFH, 06FH,0FFH, 0EBH,0DEH DB 0EBH,0B6H, 0E9H,0B7H, 01FH,0F0H, 0FFH,0FFH ; * @7 高(16x16,H)@ [suki software]*DB 0BFH,0FFH, 07FH,0FFH, 000H,080H, 0FFH,0FFHDB 00FH,0F8H, 0EFH,0FBH, 00FH,0F8H, 0FFH,0FFHDB 001H,0C0H, 0FDH,0DFH, 00DH,0D8H, 0EDH,0DBH DB 0EDH,0DBH, 00DH,0D8H, 0FDH,0D7H, 0FDH,0EFH ; * @8 级(16x16,H)@ [suki software]*DB 0F7H,0FFH, 037H,0E0H, 0FBH,0EEH, 0DBH,0EEH DB 0DDH,0F6H, 0E0H,0F6H, 0F7H,082H, 07BH,0DDH DB 041H,0DDH, 07DH,0EDH, 0BFH,0EBH, 0A7H,0F7H DB 0D8H,0F3H, 0EFH,0EDH, 077H,08EH, 09FH,0DFH ; * @9 技(16x16,H)@ [suki software]*DB 0F7H,0FBH, 0F7H,0FBH, 0F7H,0FBH, 040H,080HDB 0F7H,0FBH, 0D7H,0FBH, 067H,0C0H, 073H,0EFH DB 0F4H,0EEH, 0F7H,0F6H, 0F7H,0F9H, 0F7H,0F9HDB 0F7H,0F6H, 077H,08FH, 095H,0DFH, 0FBH,0FFH; * @10 工(16x16,H)@ [suki software]*DB 0FFH,0FFH, 003H,0C0H, 07FH,0FFH, 07FH,0FFH DB 07FH,0FFH, 07FH,0FFH, 07FH,0FFH, 07FH,0FFHDB 07FH,0FFH, 000H,080H, 0FFH,0FFH, 0FFH,0FFH; * @11 学(16x16,H)@ [suki software]*DB 07FH,0EFH, 0F7H,0CEH, 0CFH,0ECH, 0EFH,0F6HDB 001H,080H, 0FDH,0DFH, 00EH,0E8H, 0FFH,0FDHDB 0FFH,0FEH, 001H,080H, 0FFH,0FEH, 0FFH,0FEHDB 0FFH,0FEH, 0FFH,0FEH, 0BFH,0FEH, 07FH,0FFH; * @12 校(16x16,H)@ [suki software]*DB 0F7H,0FDH, 0F7H,0FBH, 0F7H,0FBH, 040H,080HDB 0F7H,0FFH, 0E3H,0EEH, 0D3H,0DEH, 075H,0AFHDB 075H,0EFH, 0B6H,0F6H, 0F7H,0F6H, 0F7H,0F9HDB 0F7H,0F9H, 077H,0E6H, 097H,08FH, 0F7H,0DFH; * @13 ,(16x16,H)@ [suki software]*DB 0FFH,0FFH, 0FFH,0FFH, 0FFH,0FFH, 0FFH,0FFHDB 0FFH,0FFH, 0FFH,0FFH, 0FFH,0FFH, 0FFH,0FFHDB 0FFH,0FFH, 0FFH,0FFH, 0FFH,0FFH, 0F3H,0FFHDB 0F3H,0FFH, 0F7H,0FFH, 0FBH,0FFH, 0FFH,0FFH; * @3 电(16x16,H)@ [suki software]*DB 07FH,0FFH, 07FH,0FFH, 07FH,0FFH, 003H,0E0HDB 07BH,0EFH, 07BH,0EFH, 003H,0E0H, 07BH,0EFHDB 07BH,0EFH, 07BH,0EFH, 003H,0E0H, 07BH,0EFHDB 07FH,0BFH, 07FH,0BFH, 0FFH,080H, 0FFH,0FFH; * @7 高(16x16,H)@ [suki software]*DB 0BFH,0FFH, 07FH,0FFH, 000H,080H, 0FFH,0FFHDB 00FH,0F8H, 0EFH,0FBH, 00FH,0F8H, 0FFH,0FFHDB 001H,0C0H, 0FDH,0DFH, 00DH,0D8H, 0EDH,0DBH DB 0EDH,0DBH, 00DH,0D8H, 0FDH,0D7H, 0FDH,0EFH ; * @14 七(16x16,H)@ [suki software]*DB 0FFH,0FFH, 07FH,0FFH, 07FH,0FFH, 07FH,0FFHDB 07FH,0FFH, 07FH,080H, 001H,0FFH, 07FH,0FFHDB 07FH,0FFH, 07FH,0FFH, 07FH,0FFH, 07FH,0DFHDB 07FH,0DFH, 07FH,0DFH, 0FFH,0E0H, 0FFH,0FFH; * @15 班(16x16,H)@ [suki software]*DB 07FH,0FFH, 060H,081H, 07BH,0F7H, 07BH,0F7HDB 07BH,0F7H, 05BH,0F7H, 040H,081H, 05BH,0F7HDB 06BH,0F7H, 07BH,0F7H, 07BH,0F7H, 0A3H,0F7HDB 0BCH,0F7H, 0DFH,080H, 0EFH,0FFH, 0F7H,0FFH; * @16 王(16x16,H)@ [suki software]*DB 0FFH,0EFH, 001H,0C0H, 07FH,0FFH, 07FH,0FFHDB 07FH,0FFH, 07FH,0FFH, 07FH,0EFH, 003H,0C0HDB 07FH,0FFH, 07FH,0FFH, 07FH,0FFH, 07FH,0FFHDB 07FH,0DFH, 000H,080H, 0FFH,0FFH, 0FFH,0FFH; * @17 兆(16x16,H)@ [suki software]*DB 0DFH,0FDH, 0DFH,0FDH, 0DFH,0EDH, 0DDH,0CDHDB 0D3H,0F5H, 0DBH,0F9H, 0DFH,0FDH, 0DFH,0F9H DB 0D7H,0F5H, 0D8H,0CDH, 0DDH,0EDH, 0EFH,0FDH DB 0EFH,0BDH, 0F7H,0BDH, 0FBH,083H, 0FDH,0FFH ; * @18 景(16x16,H)@ [suki software]*DB 007H,0F0H, 0F7H,0F7H, 007H,0F0H, 0F7H,0F7HDB 007H,0F0H, 07FH,0FFH, 000H,080H, 0FFH,0FFHDB 007H,0F0H, 0F7H,0F7H, 007H,0F0H, 06FH,0FBHDB 067H,0E7H, 079H,0CFH, 05FH,0EFH, 0BFH,0FFH; * @19 !(16x16,H)@ [suki software]*DB 0FFH,0FFH, 0FFH,0FFH, 0FFH,0FFH, 0FFH,0FFHDB 0F7H,0FFH, 0F7H,0FFH, 0F7H,0FFH, 0F7H,0FFHDB 0F7H,0FFH, 0F7H,0FFH, 0F7H,0FFH, 0F7H,0FFHDB 0F7H,0FFH, 0FFH,0FFH, 0F7H,0FFH, 0FFH,0FFH;* @0 云(16x16,H)@ [suki software]*DB 0FFH,0FFH, 0FFH,0F3H, 003H,0E0H, 0FFH,0FFHDB 0FFH,0FFH, 0FFH,0CFH, 000H,080H, 03FH,0FFHDB 01FH,0FFH, 09FH,0FDH, 0CFH,0FBH, 0E7H,0F7HDB 073H,0E0H, 001H,0CFH, 0FBH,0EFH, 0FFH,0FFHEND。
16×16点阵汉字设计-左移-右移-翻页-上移-下移-多种方式
一、设计依据16x16点阵需要32个驱动,分别为16个列驱动及16个行驱动。
每个行与每个列可以选中一个发光管,共有256个发光管,采用动态驱动方式。
每次显示一行后再显示下一行。
本设计是利用实验仪上的16×16 LED点阵显示器,编写显示英文、汉字字符程序并进行显示,最好能移动显示。
要求在本设计过程中,通过设计合适的硬件电路及对应的软件,实现上述的控制过程,同时写出合格的课程设计说明书。
二、要求及主要内容1.硬件电路设计(1)完成89C51应用系统设计(晶振电路,上电复位电路等)(2)利用单片机I/O口或以扩展锁存器的方式控制点阵显示。
掌握单片机与16×16点阵块之间接口电路的设计方法。
2.程序设计掌握单片机与16×16点阵块之间接口电路的设计方法及编程要求完成主程序的设计及对应的子程序设计。
3.选芯片, 元件按设计连线4.完成子程序调试5.完成总调试三、途径和方法综合运用单片机和电子电路相关知识,实现本次设计。
进行程序设计时先画流程图再进行程序设计。
子程序调试按以下步骤进行:(1)实验板与PC机联机。
(2)利用实验系统16×16点阵实验单元,以两种方式控制点阵显示。
要求编制程序实现汉字点阵循环显示。
点阵时钟摘要LED点阵显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。
它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。
并广泛的应用于公交汽车,码头,商店,学校和银行等公共场合的信息发布和广告宣传。
LED显示屏经历了从单色,双色图文显示屏到现在的全彩色视频显示屏的发展过程,自20世纪八十年代开始,LED显示屏的应用领域已经遍布交通、电信、教育、证券、广告宣传等各方面。
LED点阵显示屏可以显示数字或符号,通常用来显示时间、速度、系统状态等。
文章给出了一种基于MCS-51单片机的16×16 点阵LED显示屏的设计方案。
LED点阵显示仿真由浅入深之8X8,16X16,24X24LED点阵流动显示
一直以来,对LED点阵显示很感兴趣,特别是流动点阵显示。
论坛里有不少例子,可是在我的电脑上大多无法正常运行。
有的一运行就S机,能运行的,也是字符不清。
于是,自己动手。
先试作了8X8点阵。
8X8的点太少,只适合数字显示,从0 ~9流动,效果还不错。
有了8X8的经验,对流动显示的原理已经了解,又试了16X16的,觉得也不难。
但16X16的点仍嫌少了,又做了个24X24的,汉字漂亮。
动画可能效果差些,软件运行显示效果好多了。
一、8X8初学点阵仿真,常点不亮LED 。
首先,可能是点阵的极性没有正确的接线。
下面的简单方法可判断点阵的逻辑引脚。
运行proteus,在编辑区里放上一个8X8LED,如MA TRIX-8x8-GREEN。
在某些引脚上接上电源和地,试试能不能点亮。
8X8默认是上下引脚,按习惯接法,上面接电源,下面接地,不亮(图左)。
用左下角垂直翻转工具,垂直翻转,再接上电源和地,就可以点亮了(图右)。
如果是做左移显示,可再左旋90°这里可看到,左边引脚是行控制,右边引脚是列控制。
然后就可以画线路图了,点阵就保持上面那个方向。
由于点阵引线较多,特别是以后做24X24点阵,所以布线方式不用连线,而用终端加上网络标号,这样可以使画面简洁明了。
连续标号的快捷画法,我以前有帖子介绍过。
这里还是再啰嗦一下。
proteus有一个很好用的PA T(Property Assignment Tool),即属性分配工具。
可以用来做快捷标注,当然还可以用作其它操作。
再连上其它接线,一个线路图很快就可以作好。
下面,就可以写程序的源文件了。
点击菜单\Source,下拉菜单第一条Add/Remove Source Files,按键New,在跳出的对话框里写上新文件名,如8X8.asm,打开。
提示这个文件不存在,要创建吗?是。
然后点Code Gereration tool小箭头,选ASM51 ,点OK。
然后,菜单\Source,看到多了个8X8.asm,点击,出现proteus自带的汇编编辑器,就可以在里面写代码了。
8乘8点阵平移
第四周单片机任务程序具体流程如下:按下按钮,点阵显示1,串口终端显示“now ,8*8 show 1,2,3,4,5,6,7,8,9,0”,延时2秒(在这2秒内,点阵显示的1要滚动变成2,滚动效果就是银行门口的字从右到左连贯的切换的那种效果,可以看该网址视频/v_show/id_XMjE3OTM4NDIw.html)。
然后点阵显示2,再延时2秒(同上)。
当显示到点阵0后,再过2秒(同上,滚动变为1),此时串口终端换行再次显示“now ,8*8 show 1,2,3,4,5,6,7,8,9,0”。
如此往复#include<reg51.h>#define char unsigned char#define int unsigned intchar keytmp,f;char code a[]="now ,8*8 show 1,2,3,4,5,6,7,8,9,0";char code b[]="\r\n";char code disp[]={ 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x44,0x38,0x00, //00x00,0x02,0x22,0x7e,0xfe,0x22,0x02,0x00, //10x00,0x00,0x66,0x8a,0x92,0x66,0x00,0x00, //20x00,0x00,0x44,0x82,0x92,0x6c,0x00,0x00, //30x00,0x08,0x38,0xc8,0x3e,0x3e,0x08,0x00, //40x00,0x00,0xe4,0xa2,0xa2,0xa2,0x9c,0x00, //50x00,0x00,0x7c,0x92,0x92,0x4c,0x00,0x00, //60x00,0xc0,0x80,0x8e,0x9e,0xe0,0xc0,0x00, //70x00,0x00,0x6c,0x92,0x92,0x6c,0x00,0x00, //80x00,0x00,0x64,0x92,0x92,0x6c,0x00,0x00, //90x00,0x00,0x00,0x00};char code scan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //列扫描控void delay(int t) //延迟{int i,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}void fun1() //向左滚动显示{int m,n,h;for(h=0;h<80;h++) //控制显示字数(80/8=10个){for(n=0;n<25;n++) //控制帧移动速度{for(m=0;m<8;m++) //显示1帧扫描(分8行,每行亮1ms){P2=scan[m];P0=disp[m+h];delay(1);}}}}void putstring() //接收函数{ char i=0;while(a[i]!= '\0'){SBUF=a[i];while(!TI);TI=0;i++;}}void fun2(){TMOD=0x20;TH1=0xfd;TL1=0xfd;REN=1;TR1=1;SM0=0;SM1=1;}//********主程序*********//main(){keytmp=1;EA=1;ES=1;IT0=1;EX0=1; 、、、//启动定时器fun2();while(1){if(RI) //调用串口通信初始化子程序{f=SBUF;RI=0;}}}void time() interrupt 0 using 1{fun1();putstring();while(1);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我的空间有程序,你去看看,有十几种移动方法屏幕点阵数的话也可以随时改动的/*************呈现各种显示效果的函数集****************/void flash_bai(uchar *flash_word,uchar flash_heard,uchar number,uchar sdu,uchar state){register uchar i,j,l;for(i=0;i<number;i++){for(j=0;j<16;j++){for(l=0;l<8;l++){if(j<8){dispram[l*4+1]=dispram[l*4+1]&0xff<<j|(flash_word[(flash_heard+i)*32+l*4]>>( 7-j));dispram[l*4+2]=dispram[l*4+2]&0xff>>j|(flash_word[(flash_heard+i)*32+l*4+3] <<(7-j)&0x10);}else{dispram[l*4]=dispram[l*4]&0xff<<(j-7)|flash_word[(flash_heard+i)*32+l*4]>>(15-j); dispram[l*4+1]=flash_word[(flash_heard+i)*32+l*4]<<(j-7)|(flash_word[(flash_h eard+i)*32+l*4+1]>>(15-j));dispram[l*4+2]=flash_word[(flash_heard+i)*32+l*4+2]<<(15-j)|(flash_word[(flas h_heard+i)*32+l*4+3]>>(j-7));dispram[l*4+3]=(dispram[l*4+3]&0xff>>(j-7))|flash_word[(flash_heard+i)*32+l* 4+3]<<(15-j);}}delay(sdu*SPEED);}delay(state*SPEED);}}/*******************霓虹灯效果************************/void flash(uchar *flash_word,uchar flash_heard,uchar number,uchar sdu,uchar state){register uchar i,j,k,l;for(i=0;i<number;i++){for(j=0;j<=16;j++){for(k=17;k>j;k--){for(l=0;l<16;l++){if(j>8){dispram[l*2]=1<<(8-k+j)|(flash_word[(flash_heard+i)*32+l*2]&0xff>>(16-j));dispram[l*2+1]=flash_word[(flash_heard+i)*32+l*2+1];}else{dispram[l*2]=1<<(8-k+j);dispram[l*2+1]=1<<(16-k+j)|(flash_word[(flash_heard+i)*32+l*2+1]&0xff>>(8-j) );}}delay(sdu*SPEED);}for(k=17;k>j;k--){for(l=0;l<16;l++){if(j>8){dispram[l*2]=1<<(k-8)|(flash_word[(flash_heard+i)*32+l*2]&0xff>>(16-j));}else{dispram[l*2]=1<<(k-8);dispram[l*2+1]=1<<k|(flash_word[(flash_heard+i)*32+l*2+1]&0xff>>(8-j));}}delay(sdu*SPEED);}}delay(state*SPEED);}}/*******************跳动的米奇*********************/void miqi_jump(void){register uchar jump_i;while((receive[1]&0x0f)<2)//{switch (timer/3650){case 0:for(jump_i=0;jump_i<16;jump_i++){dispram[jump_i*2] = word1[11][jump_i*2]<<1|word1[11][jump_i*2+1]>>7; dispram[jump_i*2+1] = word1[11][jump_i*2+1]<<1;//左移}break;case 1:for(jump_i=0;jump_i<15;jump_i++){dispram[jump_i*2+2] = word1[11][jump_i*2];dispram[jump_i*2+3] = word1[11][jump_i*2+1];}dispram[0] = 0;dispram[1] = 0;break;//下移case 2:for(jump_i=0;jump_i<16;jump_i++){dispram[jump_i*2+1] = word1[11][jump_i*2+1]>>1|word1[11][jump_i*2]<<7; dispram[jump_i*2] = word1[11][jump_i*2]>>1;}break;//右移case 3:for(jump_i=0;jump_i<15;jump_i++){dispram[jump_i*2] = word1[11][jump_i*2+2];dispram[jump_i*2+1] = word1[11][jump_i*2+3];}dispram[30] = 0;dispram[31] = 0;break;//上移case 4: for(jump_i=0;jump_i<15;jump_i++){dispram[jump_i*2+2] = word1[11][jump_i*2]<<1|word1[11][jump_i*2+1]>>7; dispram[jump_i*2+3] = word1[11][jump_i*2+1]<<1;//左移}dispram[0] = 0;dispram[1] = 0;break;//下移case 5: for(jump_i=0;jump_i<16;jump_i++){dispram[jump_i*2+1] =word1[11][jump_i*2+3]>>1|word1[11][jump_i*2+2]<<7;dispram[jump_i*2] = word1[11][jump_i*2+2]>>1;}dispram[30] = 0;dispram[31] = 0;break;//上移case 6: for(jump_i=0;jump_i<15;jump_i++){dispram[jump_i*2+3] = word1[11][jump_i*2+1]>>1|word1[11][jump_i*2]<<7; dispram[jump_i*2+2] = word1[11][jump_i*2]>>1;}dispram[0] = 0;dispram[1] = 0;break;case 7: for(jump_i=0;jump_i<16;jump_i++){dispram[jump_i*2] = word1[11][jump_i*2+2]<<1|word1[11][jump_i*2+3]>>7; dispram[jump_i*2+1] = word1[11][jump_i*2+3]<<1;//左移}dispram[30] = 0;dispram[31] = 0;break;default:for(jump_i=0;jump_i<32;jump_i++)dispram[jump_i] = word1[11][jump_i];}}}/********从wordsp的第OpenDheard个字开始开门效果显示number个字**********///用数组更加节省空间void Open_door(uchar wordsp[][32],uchar OpenDheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(k=0;k<number;k++){for(j=1;j<9;j++){for(i=0;i<16;i++){dispram[i*2]=dispram[i*2]&0xff<<j|wordsp[OpenDheard+k][2*i]&0xff>>(8-j); dispram[i*2+1]=dispram[i*2+1]&0xff>>j|wordsp[OpenDheard+k][1+2*i]&0xff<<( 8-j);}delay(sdu*SPEED);}delay(state*TIME);}}/********从wordsp的第CloseDheard个字开始关门效果显示number个字**********///用数组更加节省空间void Close_door(uchar wordsp[][32],uchar CloseDheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(k=0;k<number;k++){for(j=1;j<9;j++){for(i=0;i<16;i++){dispram[i*2]=dispram[i*2]&0xff>>j|wordsp[CloseDheard+k][2*i]&0xff<<(8-j); dispram[i*2+1]=dispram[i*2+1]&0xff<<j|wordsp[CloseDheard+k][1+2*i]&0xff>> (8-j);}delay(sdu*SPEED);}delay(state*TIME);}}/********从wordsp的第Far_Awayheard个字开始两边拉开显示number个字**********///用数组更加节省空间void Far_Away(uchar wordsp[][32],uchar Far_Awayheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(k=0;k<number;k++){for(j=1;j<9;j++){for(i=0;i<16;i++){dispram[i*2]=dispram[i*2]<<j|wordsp[Far_Awayheard+k][2*i]&0xff>>(8-j); dispram[i*2+1]=dispram[i*2+1]>>j|wordsp[Far_Awayheard+k][1+2*i]&0xff<<(8-j);}delay(sdu*SPEED);}delay(state*TIME);}}/********从wordsp的第Close_Toheard个字开始两边合拢显示number个字**********///用数组更加节省空间void Close_To(uchar wordsp[][32],uchar Close_Toheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(k=0;k<number;k++){for(j=1;j<9;j++){for(i=0;i<16;i++){dispram[i*2]=dispram[i*2]&0xff>>j|wordsp[Close_Toheard+k][2*i]<<(8-j); dispram[i*2+1]=dispram[i*2+1]&0xff<<j|wordsp[Close_Toheard+k][1+2*i]>>(8-j );}delay(sdu*SPEED);}delay(state*TIME);}}/****************卷帘出显示number个字***************///用指针更加节省空间void M_Words(uchar *wordsp,uchar MWheard,uchar number,uchar sdu,uchar state){register uchar i,j;for(j=0;j<number;j++)for(i=0;i<32;i++){dispram[i]=wordsp[(MWheard+j)*32+i];if(i%2)delay(sdu*SPEED);}delay(state*TIME);}}/************从UP_Pullp的第UP_Pullheard个字向上拉出number个字***************///用数组更加节约空间void UP_Pull_Word(uchar UP_Pullp[][32],uchar UP_Pullheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(i=0;i<number;i++){for(j=0;j<16;j++){for(k=0;k<15-j;k++){dispram[k*2]=dispram[(k+1)*2];dispram[k*2+1]=dispram[(k+1)*2+1];}dispram[30-2*j]=UP_Pullp[UP_Pullheard+i][(15-j)*2];dispram[31-2*j]=UP_Pullp[UP_Pullheard+i][(15-j)*2+1];delay(sdu*SPEED);}delay(state*TIME);}}/*********从UPp的第UPheard个字向上滚屏number个字***************/ //用数组更加节约空间void UP_Run_Word(uchar UPp[][32],uchar UPheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(i=0;i<number;i++){for(j=0;j<16;j++)for(k=0;k<15;k++){dispram[k*2]=dispram[(k+1)*2];dispram[k*2+1]=dispram[(k+1)*2+1];}dispram[30]=UPp[UPheard+i][j*2];dispram[31]=UPp[UPheard+i][j*2+1];delay(sdu*SPEED);}delay(state*TIME);}}/*********从Down_Pullp的第Down_Pullheard个字向下拉出number个字***************///用数组更加节约空间void Down_Pull_Word(uchar Down_Pullp[][32],uchar Down_Pullheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(i=0;i<number;i++){for(j=0;j<16;j++){for(k=15;k>j;k--){dispram[k*2]=dispram[(k-1)*2];dispram[k*2+1]=dispram[(k-1)*2+1];}dispram[2*j]=Down_Pullp[Down_Pullheard+i][2*j];dispram[2*j+1]=Down_Pullp[Down_Pullheard+i][2*j+1];delay(sdu*SPEED);}delay(state*TIME);}}/*********从Downp的第UPheard个字向下滚屏number个字***************/ //用指针更加节约空间void Down_Run_Word(uchar *Downp,uchar UPheard,uchar number,uchar sdu,uchar state){register uchar i,j,k;for(i=0;i<number;i++){{for(k=15;k>0;k--){dispram[k*2]=dispram[(k-1)*2];dispram[k*2+1]=dispram[(k-1)*2+1];}dispram[0]=Downp[(UPheard+i)*32+(15-j)*2];dispram[1]=Downp[(UPheard+i)*32+(15-j)*2+1];delay(sdu*SPEED);}delay(state*TIME);}}/**********从LRp的第LRheard个字左移出显示number个字************///用指针更加节约空间void L_Removeout_Word(uchar *LRp,uchar LRheard,uchar number,uchar sdu,uchar state){register uchar i,j,k,l;for(i=0;i<number;i++){for(j=0;j<2;j++)for(k=0;k<8;k++){for(l=0;l<16;l++){dispram[l*2]=dispram[l*2]<<1|dispram[l*2+1]>>7;dispram[l*2+1]=dispram[l*2+1]<<1|LRp[(i+LRheard)*32+l*2+j]>>(7-k);}delay(sdu*SPEED);}delay(state*TIME);}}/**********从L_Pullp的第L_Pullheard个字左拉出显示number个字************/ //用指针更加节约空间void L_Pull_Word(uchar *L_Pullp,uchar L_Pullheard,uchar number,uchar sdu,uchar state){register uchar i,j,k,l;for(i=0;i<number;i++){for(j=0;j<2;j++){for(l=0;l<16;l++){if(j==0){dispram[l*2]=dispram[l*2]<<1|dispram[l*2+1]>>7;dispram[l*2+1]=(dispram[l*2+1]&0xff<<(k+1))<<1|L_Pullp[(i+L_Pullheard)*32+l *2+1]&0xff>>(7-k);}else{dispram[l*2]=(dispram[l*2]&0xff<<(k+1))<<1|L_Pullp[(i+L_Pullheard)*32+l*2]& 0xff>>(7-k);dispram[l*2+1]=L_Pullp[(i+L_Pullheard)*32+l*2+1];}}delay(sdu*SPEED);}delay(state*TIME);}}/****************卷帘出黑屏***************/void M_Black(void){register uchar i;for(i=0;i<32;i++){dispram[i]=0x00;if(i%2)delay(5*SPEED);}}/**********从RRp的第RRheard个字右移出显示number个字************///用指针更加节约空间void R_Removeout_Word(uchar *RRp,uchar RRheard,uchar number,uchar sdu,uchar state){register uchar i,j,k,l;for(i=0;i<number;i++){for(j=2;j>0;j--)for(k=0;k<8;k++){for(l=0;l<16;l++){dispram[l*2+1]=dispram[l*2+1]>>1|dispram[l*2]<<7;dispram[l*2]=dispram[l*2]>>1|RRp[(i+RRheard)*32+l*2+j-1]<<(7-k);}delay(sdu*SPEED);}delay(state*TIME);}}。