8*8点阵实现心性图案

8*8点阵原理图:
在这里插入图片描述
上方的8个位置是由P0口控制,左侧的ROW是由75HC95芯片控制;
在这里插入图片描述
14口是数据输入端,每次只能输入一位,当11引脚为上升沿时将SER中的数据送入内部移位寄存器,当把八位数据送入内部移位寄存器中,可以令RCLK为上升沿,将八位数据从移位寄存器送入锁存器中。由这个芯片和P0口来进行动态扫描显示图形;

#include "reg51.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;

char code led_mod[]={0x0C,0x12,0x22,0x44,0x22,0x12,0x0C,0x00};	  //P0口段选值;
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};		//从文字取模软件中取出的,每一列锁存器的值;
void delay(u16 i)
{
	while(i--);	
}
void Hc595SendByte(char dat)//发送八位数据;  只能是char类型具体见博客下面
{
	int a;
	SRCLK=0;
	RCLK=0;
	for(a=0;a<8;a++)  //取出数据的八位,高位先传送,低位后传送
	{
		SER=dat<<7;				   //取最高位
		dat/=2;							//舍去最高位,此高位变为最高位
		SRCLK=1;					//当SRCLK为上升沿时,移位寄存器向下移动一位,并存入一位新数据
		_nop_();					  //延时两个机器周期,保证数据移位成功
		_nop_();
		SRCLK=0;		 //为下一次的上升沿做准备;
	}

	RCLK=1;				//上升沿启动,移位寄存器的值将会被锁存到锁存器里,
	_nop_();		   //延时两个机器周期,保证数据传送成功
	_nop_();
	RCLK=0;				 //为下一次上升沿做准备
}
void main()
{
while(1)
{
int i;
for(i=0;i<8;i++)   //实现八列动态扫描的过程
{
P0=ledwei[i];	   //每次只实现一列的灯显示,只有一个引脚为0,其余的引脚都为1,
Hc595SendByte(led_mod[i]);					//
delay(100);					//延时,便于肉眼观察到现象;
Hc595SendByte(0x00);		 //	要进行消隐,因为距离下一个循环时间很短,如果不改变锁存器的话,这一次的锁存器的值会体现在下一个循环中,造成视觉影响;
_nop_();						//或者将发送数据写道PO取值之前,这样就不会造成视觉误差;
_nop_();
}
}
}

关于int类型和char类型的说明:
int类型是一个字节的存储单元,为十六数据,占二个字节,赋值0xff后,里面存储的就是0x00ff;
在这里插入图片描述
在这里插入图片描述
char类型占一个字节,赋值过0xff后里面存储的便是0xff,和int不同,int如果只赋值八个位,则前八位为零
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值