【基于51单片机】点阵显示“生日快乐”


原理图

源代码

/* 以下是取到的字模
{0x08,0x7E,0x48,0x9C,0x08,0x08,0x7E,0x00},/"?",0/
{0x00,0x1E,0x22,0x3E,0x22,0x22,0x3E,0x00},/"?",1/
{0x48,0x5C,0x2A,0xFE,0x48,0x4C,0x54,0x62},/"?",2/
{0x00,0x3E,0x48,0x7E,0x08,0x2C,0x4A,0x10},/"?",3/
字模有逐行取模、逐列取模;阴码、阳码
*/
#include 
typedef unsigned int u16;
typedef unsigned char u8;

#define DATA P0 //定义数据端口
#define COUNT P3 //定义计数端口

u8 tab_num[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; //逐行取模,此数组计数用
u8 tab_char[4][8] = {
0x08,0x7E,0x48,0x9C,0x08,0x08,0x7E,0x00,/*"生",0*/
0x00,0x1E,0x22,0x3E,0x22,0x22,0x3E,0x00,/*"日",1*/
0x48,0x5C,0x2A,0xFE,0x48,0x4C,0x54,0x62,/*"快",2*/
0x00,0x3E,0x48,0x7E,0x08,0x2C,0x4A,0x10,/*"乐",3*/
							/*后面还可以加更多的字*/
}; //字模信息

void Delay500ms(); //函数声明
void main()
{
	while(1)
	{
		u8 i, j;
		u16 k;
		for(j=0; j<4; j++) //控制显示4个汉字
		{
			for(k=2500; k>0; k--)  //强行延时
			{
				for(i=0; i<8; i++) //显示每个汉字,扫描8次
				{
					DATA = 0x00; //这句一定要写,不然字会糊
					COUNT = tab_num[7-i];
					DATA = tab_char[j][i];
				}
			}
		}
	}
}

单片机入门 https://www.bilibili.com/video/BV1o54y1i7Cu

proteus入门 https://www.bilibili.com/video/BV12Q4y1A7QM