武汉理工大学《能力拓展训练》说明书
lcd_wcmd(0x36); //写完数据,开图形显? while(flag==0) if(flag==6)flag=2;//图像停止 if(flag!=2)return; delay1(1000); clr_screen(); bmp33-=16*line; //每次移动8行--16*line字节 } }
/********************************************************* * 图像左移函数 */ void picture_mov_Left(uchar *bmp1,uchar *bmp2) { uchar i,j,m=0,n; uchar *bmp11=bmp1,*bmp22=bmp2; for(n=0;n<16;n++) { lcd_wcmd(0x34); //写数据时,关闭图形显示 bmp1=bmp11+m; //保存图片地址 bmp2=bmp22; for(i=0;i<32;i++) //写上半屏 { lcd_wcmd(0x80+i); //先写入水平坐标值 lcd_wcmd(0x80); //写入垂直坐标值 for(j=m;j<16;j++) //再写入两个8位元的数据 lcd_wdat(*bmp1++); bmp1+=m; for(j=0;j 26 武汉理工大学《能力拓展训练》说明书 lcd_wcmd(0x36); //写完数据,开图形显? while(flag==0) if(flag==6)flag=3;//图像停止 if(flag!=3)return; delay1(1000); clr_screen(); //清屏 m++; } } /********************************************************* * 图像右移函数 */ void picture_mov_Right(uchar *bmp1,uchar *bmp2) { uchar i,j,m=0,n; uchar *bmp11=bmp1,*bmp22=bmp2; for(n=0;n<16;n++) { lcd_wcmd(0x34); //写数据时,关闭图形显示 bmp1=bmp11+16-m; //保存图片地址 bmp2=bmp22; for(i=0;i<32;i++) //写上半屏 { lcd_wcmd(0x80+i); //先写入水平坐标值 lcd_wcmd(0x80); //写入垂直坐标值 for(j=16-m;j<16;j++) lcd_wdat(*bmp1++); bmp1+=(16-m); for(j=0;j<16-m;j++) //再写入两个8位元的数据 lcd_wdat(*bmp2++); bmp2+=m; delay1(1); } for(i=0;i<32;i++) //写下半屏 { lcd_wcmd(0x80+i); //先写入水平坐标值 lcd_wcmd(0x88); //写入垂直坐标值 for(j=16-m;j<16;j++) lcd_wdat(*bmp1++); bmp1+=(16-m); for(j=0;j<16-m;j++) //再写入两个8位元的数据 lcd_wdat(*bmp2++); bmp2+=m; delay1(1); } 27 武汉理工大学《能力拓展训练》说明书 lcd_wcmd(0x36); //写完数据,开图形显? while(flag==0) if(flag==6)flag=4;//图像停止 if(flag!=4)return; delay1(1000); clr_screen(); //清屏 m++; } } void init_display() { uchar i; lcd_init(); lcd_pos(1,0); for(i=0;i<16;i++) { lcd_wdat(DIS1[i]); delay1(20); } lcd_pos(2,0); for(i=0;i<16;i++) { lcd_wdat(DIS2[i]); delay1(20); } lcd_pos(3,0); for(i=0;i<16;i++) { lcd_wdat(DIS3[i]); delay1(20); } lcd_pos(4,0); for(i=0;i<16;i++) { lcd_wdat(DIS4[i]); delay1(20); } delay1(1000); lcdflag(time); photodisplay(Photo1); delay1(1000); photodisplay(Photo2); //初始化LCD //设置显示位置为第一行 //设置显示位置为第二行 //设置显示位置为第三行 //设置显示位置为第四行 //闪烁函数time为闪烁时间 //显示图片1 //显示图片2 28 武汉理工大学《能力拓展训练》说明书 } delay1(1000); 5、结果分析 5.1仿真电路图 仿真电路图如图5.1.1所示。 C130pFRP1U1X119XTAL1CRYSTAL18XTAL2P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.61234567891KLCD2AMPIRE128X64+5vC230pFRV1VO9RSTC320uf293031PSENALEEACS1CS2GNDVCCV0RSR/WEDB0DB1DB2DB3DB4DB5DB6DB7RST-Vout1kR180012345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52P2.0P2.1V+VOP2.2P2.3P2.4P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.73U2:A74092UpP3.0DownP3.11VO123456789101112131415161718 5.1.1 仿真电路图 5.2 运行结果及分析 硬件电路运行效果图如下所示: 图5.3.1 图像上移图5.3.2图像下移 29 武汉理工大学《能力拓展训练》说明书 图5.3.3图像左移图5.3.4 图像右移 硬件电路上电后,先显示初始化界面及两幅图像,然后停止显示第二幅图像, 等待下一步操作,即红外的输入。当按下红外遥控器的1、2、3、4(其中一个)后,可看到图像的上、下、左、右移动。在以上过程中改变移动方向时,首先出现图像停止移动,等待一段时间后,图像才响应按下的键。这是由于每次刷屏需要消耗几百毫秒时间,而中断返回后可能仍处于刷新上一次图像的过程,而且每次刷新一幅图像的中间有软件延时过程,同时,由于按键的检测是采用外部中断0服务程序中响应红外遥控的方法,每次红外的解码大约又要消耗个100毫秒左右,这些都可能导致图像的停滞状态的出现。 在之前的调试过程中发现,当每按下一方向按键,图像会停止移动大约1s 左右,当然有时更长,有时短些。这是由于图像的移动需要MPU每时每刻向CGRAM写入数据,然后开显示,图像才会有移动的效果。而当接收到红外数据时,程序进入到外部中断0中断服务程序,因此会出现图像静止。而图像移动方向改变反应过慢,主要是因为每次图像移动函数要执行约8s(上下移动)或16s(左右移动),之后才会回到主函数判断flag值。当我在每次移动完一行或者一列之后,加一句判断flag值是否改变时,可以看到按下按键后,图像移动方向改变的速度变快了,反应更加及时了。 该设计能够实现红外控制其图像的上、下、左、右循环移动,并有图像的静 止及继续移动的功能。 30