8*8点阵移动仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- /************************************************************
- 名称: 四个8*8点阵移动实验
- ************************************************************/
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar i,j,k,a,b;
- char kk;
- uchar code tabwe[]={ //0~9的字模(每个数字高8点,宽5点,下面一点为高位,一个数字用5个字节表示)
- 0x7E, 0x91, 0x89, 0x85, 0x7E,//0
- 0x00, 0x82, 0xFF, 0x80, 0x00,//1
- 0x86, 0xC1, 0xA1, 0x91, 0x8E,//2
- 0x41, 0x89, 0x8D, 0x8B, 0x71,//3
- 0x38, 0x24, 0x22, 0xFF, 0x20,//4
- 0x4F, 0x89, 0x89, 0x89, 0x71,//5
- 0x7E, 0x89, 0x89, 0x89, 0x72,//6
- 0x01, 0x01, 0xF9, 0x05, 0x03,//7
- 0x76, 0x89, 0x89, 0x89, 0x76,//8
- 0x4E, 0x91, 0x91, 0x91, 0x7E, //9
- 0//空位
- };
- uchar table[]={ //显存8*4=32个字节,一个字节8位,四个8*8点阵的分辨率就是32*8
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0
- };
- void delay(uint ms) //延时500us
- {
- uchar a,b;
- while(ms--)
- {
- for(b=71;b>0;b--)
- for(a=2;a>0;a--);
- }
- }
- void xh1(kk)//左移子程序
- {
- for(k=0;k<32;k++)
- {
- a=kk+k-32;
- if(a>50||a<0){a=50;}
- table[k]=tabwe[a];
- }
- }
- void xh2(kk)//右移子程序
- {
- for(k=0;k<32;k++)
- {
- a=50-kk+k;
- if(a>50||a<0){a=50;}
- table[k]=tabwe[a];
- }
- }
- void xh3(kk)//向下移进,向上移出
- {
- for(k=0;k<32;k++)
- {
- table[k]=(tabwe[k]>>kk);
- }
- }
- void xh4(kk)//向上移进,向下移出
- {
- for(k=0;k<32;k++)
- {
- table[k]=(tabwe[k]<<kk);
- }
- }
- void dsplay()
- {
- for(j=0;j<5;j++) //j是每幅图象显示的次数,j越小移动得越快;j越大移动得越慢。
- {
- for(i=0;i<16;i++)//一幅图象32个字节,因为分P1和P2口同时显示,所以只要16次。
- {
- P0=i;
- P1=table[i];
- P2=table[i+16];
- delay(2);
- }
- }
- }
- void main()
- {
- while (1)
- {
- for(kk=0;kk<82;kk++)//左移(从32位空屏,到0-9进入,再到全部移出共要32+50次)
- {
- dsplay();
- xh1(kk);
- }
- for(kk=0;kk<82;kk++)//右移(从32位空屏,到9-0进入,再到全部移出共要32+50次)
- {
- dsplay();
- xh2(kk);
- }
- for(kk=8;kk>=0;kk--)//向下移进
- {
- dsplay();
- xh3(kk);
- }
- for(kk=0;kk<8;kk++)//向下移出
- {
- dsplay();
- xh4(kk);
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
88点阵上下左右移动.rar
(19.34 KB, 下载次数: 116)
|