标题:
C51单片机驱动MAX7219控制LED点阵滚动显示汉字程序
[打印本页]
作者:
oops64
时间:
2022-5-24 12:33
标题:
C51单片机驱动MAX7219控制LED点阵滚动显示汉字程序
利用多个8*8点阵模块设计并制作条形显示屏,滚动显汉字,现在写出了C语言,但是老师要求汇编
图片1.png
(68.33 KB, 下载次数: 74)
下载附件
2022-5-24 12:36 上传
作者:
oops64
时间:
2022-5-24 12:37
#include <reg52.h>
#include <intrins.h>
#define u8 unsigned char
#define u16 unsigned int
#define DECODE_MODE 0x09
#define INTENSITY 0x0A
#define SCAN_LIMIT 0x0B
#define SHUT_DOWN 0x0C
#define DISPLAY_TEST 0x0F
#define BLOCKS 8
sbit MAX7219_CLK = P1^2;
sbit MAX7219_CS = P1^1;
sbit MAX7219_DIN = P1^0;
u8 code bytes[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/* 热[0xC8C8] 16x16 */
0x08,0x40,0x08,0x40,0x08,0x48,0x7F,0xFC,0x08,0x48,0x0A,0x48,0x1C,0xC8,0x68,0x48,
0x08,0xA8,0x08,0x8A,0x29,0x0A,0x12,0x04,0x00,0x00,0x48,0x88,0x44,0x46,0x84,0x42,
/* GB2312 16x16点阵字库*/
/* 烈[0xC1D2] 16x16 */
0x01,0x04,0x7F,0x84,0x10,0x24,0x10,0x24,0x1F,0x24,0x21,0x24,0x21,0x24,0x52,0x24,
0x0C,0x24,0x08,0x04,0x30,0x0C,0x40,0x00,0x28,0x90,0x24,0x4C,0x44,0x46,0x80,0x02,
/* GB2312 16x16点阵字库*/
/* 祝[0xD7A3] 16x16 */
0x20,0x08,0x13,0xFC,0x12,0x08,0x02,0x08,0xFE,0x08,0x0A,0x08,0x12,0x08,0x3B,0xF8,
0x56,0xA8,0x90,0xA0,0x10,0xA0,0x11,0x20,0x11,0x22,0x12,0x22,0x14,0x1E,0x18,0x00,
/* GB2312 16x16点阵字库*/
/* 贺[0xBAD8] 16x16 */
0x10,0x00,0x10,0x04,0x7F,0x7E,0x11,0x44,0x11,0x44,0x25,0x7C,0x42,0x10,0x9F,0xF8,
0x10,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x02,0xC0,0x0C,0x30,0x30,0x08,
/* GB2312 16x16点阵字库*/
/* 中[0xD6D0] 16x16 */
0x01,0x00,0x01,0x00,0x01,0x04,0x7F,0xFE,0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04,
0x7F,0xFC,0x41,0x04,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
/* GB2312 16x16点阵字库*/
/* 南[0xC4CF] 16x16 */
0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x04,0x7F,0xFE,0x48,0x24,0x44,0x44,
0x5F,0xF4,0x41,0x04,0x41,0x04,0x5F,0xF4,0x41,0x04,0x41,0x04,0x41,0x14,0x40,0x08,
/* GB2312 16x16点阵字库*/
/* 大[0xB4F3] 16x16 */
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x80,
0x02,0x80,0x02,0x40,0x04,0x40,0x04,0x20,0x08,0x10,0x10,0x0E,0x60,0x04,0x00,0x00,
/* GB2312 16x16点阵字库*/
/* 学[0xD1A7] 16x16 */
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
/* GB2312 16x16点阵字库*/
/* 物[0xCEEF] 16x16 */
0x11,0x00,0x11,0x00,0x51,0x00,0x51,0x04,0x7B,0xFE,0x54,0xA4,0x90,0xA4,0x1C,0xA4,
0x31,0x24,0xD1,0x44,0x12,0x44,0x12,0x44,0x14,0x84,0x10,0x84,0x11,0x28,0x10,0x10,
/* GB2312 16x16点阵字库*/
/* 理[0xC0ED] 16x16 */
0x00,0x08,0x13,0xFC,0xFA,0x48,0x22,0x48,0x23,0xF8,0x22,0x48,0xFA,0x48,0x23,0xF8,
0x20,0x40,0x20,0x50,0x23,0xF8,0x3C,0x40,0xE0,0x40,0x40,0x44,0x0F,0xFE,0x00,0x00,
/* GB2312 16x16点阵字库*/
/* 与[0xD3EB] 16x16 */
0x10,0x00,0x10,0x00,0x10,0x08,0x1F,0xFC,0x10,0x00,0x10,0x00,0x10,0x08,0x1F,0xFC,
0x00,0x08,0x00,0x08,0x00,0x48,0xFF,0xE8,0x00,0x08,0x00,0x08,0x00,0x50,0x00,0x20,
/* GB2312 16x16点阵字库*/
/* 电[0xB5E7] 16x16 */
0x02,0x00,0x02,0x00,0x02,0x10,0x7F,0xF8,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,
0x42,0x10,0x7F,0xF0,0x42,0x10,0x02,0x00,0x02,0x04,0x02,0x04,0x01,0xFC,0x00,0x00,
/* GB2312 16x16点阵字库*/
/* 子[0xD7D3] 16x16 */
0x00,0x00,0x3F,0xF0,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x04,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
/* GB2312 16x16点阵字库*/
/* 学[0xD1A7] 16x16 */
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
/* 院[0xD4BA] 16x16 */
0x00,0x80,0x78,0x40,0x4F,0xFE,0x54,0x02,0x58,0x14,0x63,0xF8,0x50,0x00,0x48,0x08,
0x4F,0xFC,0x48,0xA0,0x68,0xA0,0x50,0xA0,0x41,0x22,0x41,0x22,0x42,0x1E,0x4C,0x00,
/* GB2312 16x16点阵字库*/
/* 成[0xB3C9] 16x16 */
0x00,0x80,0x00,0xA0,0x00,0x90,0x3F,0xFC,0x20,0x80,0x20,0x80,0x20,0x84,0x3E,0x44,
0x22,0x48,0x22,0x48,0x22,0x30,0x2A,0x20,0x24,0x62,0x40,0x92,0x81,0x0A,0x00,0x06,
/* GB2312 16x16点阵字库*/
/* 立[0xC1A2] 16x16 */
0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x08,0x7F,0xFC,0x00,0x00,0x00,0x10,0x10,0x10,
0x08,0x20,0x08,0x20,0x04,0x40,0x04,0x40,0x04,0x80,0x00,0x04,0xFF,0xFE,0x00,0x00,
/* 字串 20 16x16 */
0x00,0x00,0x00,0x00,0x7C,0x7C,0xC6,0xC6,0x06,0xC6,0x0C,0xCE,0x18,0xD6,0x30,0xD6,
0x60,0xE6,0xC0,0xC6,0xC6,0xC6,0xFE,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/* GB2312 16x16点阵字库*/
/* 周[0xD6DC] 16x16 */
0x00,0x08,0x3F,0xFC,0x21,0x08,0x21,0x48,0x2F,0xE8,0x21,0x08,0x21,0x28,0x3F,0xF8,
0x20,0x48,0x27,0xE8,0x24,0x48,0x24,0x48,0x24,0x48,0x47,0xC8,0x84,0x28,0x00,0x10,
/* GB2312 16x16点阵字库*/
/* 年[0xC4EA] 16x16 */
0x08,0x00,0x08,0x08,0x1F,0xFC,0x11,0x00,0x21,0x00,0x41,0x10,0x1F,0xF8,0x11,0x00,
0x11,0x00,0x11,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00
};
u8 val[8];
u8 character_len = sizeof(bytes) / 8;
void delay(u16 x)
{
u16 i,j;
for(i = 0; i < x; i++)
for(j = 0;j < 112; j++);
}
void Max7219_writeByte(u8 dat)
{
u8 i;
MAX7219_CS = 0;
for(i = 8; i >= 1; i--)
{
MAX7219_CLK = 0;
MAX7219_DIN = dat & 0x80; // &10000000, 取最高位
dat = dat << 1;
MAX7219_CLK = 1;
}
}
void Max7219_singeWrite(u8 index, u8 addr, u8 dat)
{
MAX7219_CS = 0;
Max7219_writeByte(addr);
Max7219_writeByte(dat);
while(index--)
{
Max7219_writeByte(0x00);
Max7219_writeByte(0x00);
}
MAX7219_CS = 1;
}
void Max7219_multiWrite1(u8 addr, u8* dat)
{
u16 t=8;
MAX7219_CS = 0;
while(t--)
{
Max7219_writeByte(addr);
Max7219_writeByte (*dat++);
}
MAX7219_CS = 1;
}
void Max7219_init(void)
{
u8 i;
for (i = 0; i < BLOCKS; i++)
{
Max7219_singeWrite(i, SHUT_DOWN, 0x01); // 0x00:shutdown, 0x01:normal
Max7219_singeWrite(i, DECODE_MODE, 0x00); // No decode
Max7219_singeWrite(i, INTENSITY, 0x03); // 0x00:min, 0x0F:max
Max7219_singeWrite(i, SCAN_LIMIT, 0x07); // Display 8 digits
Max7219_singeWrite(i, DISPLAY_TEST, 0x00); // 0x00:normal, 0x01:test mode
}
}
void main(void)
{
u16 i=0,j=0,t=0,n=0,m=0,f;
Max7219_init();
while(1)
{
f=0;
n = t / 8; // 第几个字
m=t%8;
for(j=0;j<8;j++)
{
for(i=0;i<4;i++)
{
f=(n+i)%(character_len/2);
val[i]=bytes[2*j+f/2*32+f%2]<<m;
val[i+4]=bytes[2*j+f/2*32+f%2+16]<<m;
f=(n+i+1)%(character_len/2);
val[i]|=bytes[2*j+f/2*32+f%2]>>8-m;
val[i+4]|=bytes[2*j+f/2*32+f%2+16]>>8-m;
}
Max7219_multiWrite1(j+1, val);
}
t=(t+1)%(sizeof(bytes)/2);
delay(150);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1