|
1金钱
想用开发板做滚动显示I Love U,但是不知道为什么有拖影,求解答。
- #include <reg51.h>
- #include <intrins.h>
- sbit SER = P3^4;
- sbit RCLK = P3^5;
- sbit SRCLK = P3^6;
- unsigned char lie_array[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x82,0xFE,0xFE,0x82,0x00,0x00,
- 0x70,0xF8,0xFC,0x7E,0x7E,0xFC,0xF8,0x70,
- 0x00,0xFC,0xFE,0x06,0x06,0xFE,0xFC,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- unsigned char hang_array[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- void HC595(unsigned char);
- void main()
- {
- EA = 1;
- TMOD = 0x01;
- TH0 = 0xFC;
- TL0 = 0x67;
- ET0 = 1;
- TR0 = 1; //配置中断
- while(1);
- }
- void HC595(unsigned char data1) //用于点亮每一列
- {
- unsigned char j;
- SRCLK = 0;
- RCLK = 0;
- for(j=0;j<8;j++)
- {
- SER = data1>>7;
- data1 = data1<<1;
- SRCLK = 1;
- _nop_();
- _nop_();
- SRCLK = 0;
- }
- RCLK=1;
- _nop_();
- _nop_();
- RCLK=0;
- }
- void InterruptTimer0() interrupt 1
- {
- static unsigned char i = 0;
- static unsigned char tmr = 0; //250ms换帧
- static unsigned char index = 0; //图片刷新索引
- TH0 = 0xFC;
- TL0 = 0x67;
- switch(i)
- {
- case(0): P0 = hang_array[i]; HC595(lie_array[index+0]); i++; break;
- case(1): P0 = hang_array[i]; HC595(lie_array[index+1]); i++; break;
- case(2): P0 = hang_array[i]; HC595(lie_array[index+2]); i++; break;
- case(3): P0 = hang_array[i]; HC595(lie_array[index+3]); i++; break;
- case(4): P0 = hang_array[i]; HC595(lie_array[index+4]); i++; break;
- case(5): P0 = hang_array[i]; HC595(lie_array[index+5]); i++; break;
- case(6): P0 = hang_array[i]; HC595(lie_array[index+6]); i++; break;
- case(7): P0 = hang_array[i]; HC595(lie_array[index+7]); i=0; break;
- }
- //以下代码每250ms改变一帧图像
- tmr++;
- if (tmr >= 250)
- {
- tmr = 0;
- index++;
- if(index >= 32)
- {
- index = 0;
- }
- }
- }
复制代码
我知道答案
本帖寻求最佳答案回答被采纳后将获得系统奖励 10 金钱 , 目前已有 3人回答
|
|