首先, 上一张16X16点阵的仿真图, 我已尽量备注详细
下面是从上图的仿真扩展为16X32(相应的程序也要修改)
这样子应该看明白了吧, 有想法的程友可以自己动手再扩展
单片机源程序如下:
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define SPEED 2 //移动速度,数字越小越快,数字越大越慢
- sbit DS=P2^0; //接U2_74HC595的引脚14
- sbit ST=P2^2; //接U2_74HC595的引脚12
- sbit SH=P2^1; //接U2_74HC595的引脚11
- uchar code table1[]={ //点阵屏的上部(1屏和2屏)
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空白屏
- 0x04,0x24,0x24,0x24,0x7F,0xC4,0x44,0x04,0x04,0xFF,0x04,0x44,0x34,0x05,0x04,0x00,/*"我"的上半部,0*/
- 0x01,0x26,0x34,0x2C,0x24,0x24,0x37,0x4C,0x44,0x44,0x4C,0x74,0xC4,0x45,0x06,0x00,/*"爱"的上半部,1*/
- 0x00,0x01,0x06,0x1F,0xE0,0x02,0x04,0x18,0xF0,0x10,0x13,0x10,0x10,0x14,0x18,0x00,/*"你"的上半部,2*/
- 0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,/*"中"的上半部,3*/
- 0x00,0x7F,0x40,0x48,0x49,0x49,0x49,0x4F,0x49,0x49,0x49,0x48,0x40,0x7F,0x00,0x00,/*"国"的上半部,4*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空白屏
- };
- uchar code table2[]={ //点阵屏的下部(3屏和4屏)
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空白屏
- 0x00,0x10,0x12,0x21,0xFE,0x40,0x82,0x02,0x04,0xC8,0x30,0x28,0x44,0x82,0x1F,0x00,/*"我"的下半部,0*/
- 0x00,0x82,0x84,0x89,0x91,0xE1,0xB2,0xAA,0xA4,0xA4,0xAA,0xB2,0x81,0x01,0x01,0x00,/*"爱"的下半部,1*/
- 0x80,0x00,0x00,0xFF,0x00,0x08,0x30,0xC0,0x02,0x01,0xFE,0x00,0x80,0x60,0x18,0x00,/*"你"的下半部,2*/
- 0x00,0x00,0xF0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,0x00,/*"中"的下半部,3*/
- 0x00,0xFF,0x02,0x12,0x12,0x12,0x12,0xF2,0x12,0x52,0x32,0x12,0x02,0xFF,0x00,0x00,/*"国"的下半部,4*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空白屏
- };
- void senddata(uchar,uchar);
- void delay(uint);
- void main()
- {
- uchar i,j,k,m,n=0;
- while(1)
- {
- for(i=0;i<96;i++) //要显示的字数,值=字数*16+16, 最后的这个16是显示一个空白屏
- {
- for(j=0;j<SPEED;j++) //移动速度
- {
- for(k=0;k<16;k++) //显示列数(勿修改)
- {
- m=i+k;
- P1=k;
- senddata(table1[m],table2[m]); //传送第上部屏和下部屏
- delay(100); //延时
- senddata(0,0); //消隐,全灭
- }
- }
- }
- }
-
- }
- /* 将每行数据送至74HC595
- * m为高8位,n为低8位
- * SH为移位时钟,ST为锁存时钟 */
- void senddata(uchar m,uchar n)
- {
- uchar i;
- ST=0;
- for(i=0;i<16;i++) //有多少行,就改多少
- {
- SH=0;
- if(i<8) { //1-8行
- DS=0X80&(m<<i);
- } else if(i>=8 && i<16) { //9-16行
- DS=0X80&(n<<(i-8));
- }
- SH=1;
- }
- ST=1;
- }
- void delay(uint m)
- {
- uint j;
- for(j=m;j>0;j--);
- }
复制代码
取模方式
附件内容, 有些程友上传的附件不全, 导致下载浪费黑币, 还有的程友发布的仿真程序只有hex, 但在内容描述却带有源程序字样, 在此BS一下
仿真打开后, 如果单片机指定的main.hex变动, 请手工重新指定
全部资料51hei下载地址:
16X16点阵扩展16X32点阵示例(程序+仿真).zip
(633.65 KB, 下载次数: 276)
|