16*96点阵仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源码如下:
- /********************* 希望那些还在论坛苦恼的朋友们能看到这款16*16汉字显示案例 ************************/
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- #define CTRL_PORT P2
- #define DATA_PORT P0
- #define ADDR_PORT P1
- uchar code *p;
- uchar code zifu[12][32]={
-
- {0x00,0x01,0x00,0x01,0x3F,0x01,0xA0,0x7F,0xA1,0x20,0x52,0x12,0x14,0x02,0x08,0x02,
- 0x18,0x02,0x18,0x06,0x24,0x05,0x24,0x09,0x82,0x18,0x61,0x70,0x1C,0x20,0x00,0x00},
-
- {0x02,0x00,0x84,0x01,0x6C,0x3E,0x24,0x22,0x20,0x22,0x20,0x22,0x27,0x22,0x24,0x22,
- 0xA4,0x22,0x64,0x2A,0x24,0x12,0x04,0x02,0x04,0x02,0x0A,0x00,0xF1,0x7F,0x00,0x00},
-
- {0x80,0x00,0x80,0x00,0xFC,0x3F,0x80,0x00,0x90,0x0C,0xA0,0x04,0xC0,0x02,0xFE,0x7F,
- 0x80,0x01,0xC0,0x02,0xA0,0x04,0x90,0x18,0x8C,0x70,0x83,0x20,0x80,0x00,0x80,0x00},
-
- {0x60,0x02,0x1C,0x0A,0x10,0x12,0x10,0x12,0x10,0x02,0xFF,0x7F,0x10,0x02,0x10,0x12,
- 0x70,0x14,0x1C,0x0C,0x13,0x04,0x10,0x0A,0x90,0x49,0x10,0x50,0x14,0x60,0x08,0x40},
-
- {0x40,0x00,0x80,0x00,0xFE,0x7F,0x02,0x40,0x21,0x22,0x10,0x04,0x08,0x08,0x04,0x10,
- 0xF8,0x0F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFE,0x3F,0x00,0x00},
-
- {0x04,0x00,0xC8,0x3F,0x08,0x20,0x02,0x20,0xE2,0x27,0x22,0x24,0x22,0x24,0xE2,0x27,
- 0x22,0x24,0x22,0x24,0xE2,0x27,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x28,0x02,0x10}
- };
- uchar select_hc138[][4]=
- {
- {0x20,0x21,0x22,0x23},
- {0x24,0x25,0x26,0x27},
-
- {0x10,0x11,0x12,0x13},
- {0x14,0x15,0x16,0x17},
- {0x18,0x19,0x1a,0x1b},
- {0x1c,0x1d,0x1e,0x1f}
- };
- void delay(void)
- {
- uchar i;
- for(i=0;i<20;i++);
- }
- void plany(void)
- {
- uchar i,j,k;
- for(k=0;k<6;k++)
- {
- for(j=0;j<1;j++)
- {
- for(i=0;i<8;i++)
- {
- CTRL_PORT=select_hc138[k][0];
- DATA_PORT=zifu[k][2*i];
-
- ADDR_PORT=i;
- delay();
-
- CTRL_PORT=select_hc138[k][1];
- DATA_PORT=zifu[k][2*i+1];
-
- ADDR_PORT=i;
- delay();
- }
- for(i=8;i<16;i++)
- {
- CTRL_PORT=select_hc138[k][2];
- DATA_PORT=zifu[k][2*i];
-
- ADDR_PORT=i-8;
- delay();
-
- CTRL_PORT=select_hc138[k][3];
- DATA_PORT=zifu[k][2*i+1];
-
- ADDR_PORT=i-8;
- delay();
- }
- }
- }
- }
- void PORT_init()//可放main中,初始化分开放main看起来简节一些
- {
- TMOD=0x01;
- TH0=0xb1;
- TL0=0xe0;
- ET0=1;
- EA=1;
- }
- void main()
- {
- PORT_init();
- while(1)
- {
- p=zifu;
- plany();//此处加一定的延时,让P=另外一个定义数组,就能达到换内容的效果
- }
- }
- void timer0() interrupt 1 using 3
- {
- TF0=0;
- TH0=0xb1;
- TL0=0xe0;
- }
复制代码
附上原码,仿真,取字工具
51知识点16vs16点阵基本操作.rar
(342.7 KB, 下载次数: 104)
|