⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dianzhen.c

📁 笔者自己弄的一个32*16的点阵模块,使用51单片机以及74hc595和74hc138实现,内有动态显示程序和静态显示程序,以及Protel99SE原理图和PCB图.
💻 C
字号:
#include"reg51.h"
#include"for51.h"

typedef char bool;
#define TURE  1
#define FALSE 0

#define Length 31 //点阵长度

uchar x, y;//x表示8块点阵中的哪一块,y表示选中点阵的哪一列

void SendData(uchar ddata);
bool DisplayPic(uchar start, uchar* pic, uchar num);  //向74HC595发送数据
void Delayms(uint ticks);

//图片数据
/*--  文字:  皇  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=16x16   --*/
uchar code Pic[] = {
0x00,0x00,0x7E,0x7E,0x56,0x57,0x57,0x56,0x56,0x56,0x56,0x7E,0x7E,0x00,0x00,0x00,
0x60,0x63,0x6B,0x6B,0x6B,0x6B,0x6B,0x7F,0x7F,0x6B,0x6B,0x6B,0x6B,0x63,0x60,0x00,
};

void main(void) {
	while(1) {
  		DisplayPic(8, Pic, 32);//显示pic1
  		Delayms(10);
 	}
}

/**************************************************
函数名称: 串行数据发送函数
参数含义: ddata - 字节显示数据
函数功能: 主机向从机发送一个字节串行数据
返 回 值: 无返回
**************************************************/							 
void SendData(uchar ddata) {
	uchar count=0;
	for(; count != 8; count++) {
		SCK = 0;
		if(ddata & 0x80)
			MOSI=1;	//发送数据
  		else
			MOSI=0;
  		SCK = 1;				//发送时钟
  		ddata <<= 1;				//数据右移一位
 	}
 	SS = 0;
  	SS = 1;					//锁存数据
 	SS = 0;
}

/**************************************************
函数名称: 延时函数
参数含义: 延长时间
函数功能: 延时
返 回 值: 无返回
**************************************************/
void Delayms(uint ticks) {
	uchar i;
	for(; ticks != 0; ticks--)
	for(i = 100; i != 0; i--);
}


/**************************************************
函数名称: 图片显示函数
参数含义: start - 从哪一列开始显示
		  pic - 图片数据指针
	      num - 图片数组字节数
函数功能: 从某一列开始显示一副图片
返 回 值: bool类型,正确显示返回TURE,异常返回FALSE
**************************************************/
bool DisplayPic(uchar start, uchar* pic, uchar num) {
	uchar i;
	uchar tempx, tempy;
	if((Length - 8 + 1) < (start/2))//如果显示长度不够图片显示则出现异常返回FALSE
		return FALSE;
	x = start / 8;//选中哪一块
	y = start % 8;//选中那块的哪一列
	for(i = 0; i < num; i++) {
		if(i < num/2) {//先扫描上一排
			tempx = x;
			tempy = y;
		}
		else {//扫描下一排
			tempx = x + 4;
			tempy = y;
		}
		if(tempy != y && tempy % 8 == 0) {//当此块点阵扫描到最后一列,则换到下一块
			tempx++;
			tempy = 0;
		}
		P0 &= 0xf0;//第几块点阵译码器
		P0 |= 1;//关总显示
		SendData(pic[i]);//发送数据
		P2 = tempy++;//第几列译码器数据
		P0 = tempx << 1;//第几块译码器数据
		P0 &= 0xfe;//开块译码器
 	    Delayms(10);
	}
	return TURE;
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -