点阵显示王例程

本文介绍了一种使用51单片机控制LED显示的方法,通过编程实现数据的串行传输到51系列移位寄存器芯片,进而控制LED阵列的显示。详细解释了使用C语言进行编程的过程,包括初始化、数据传输和延时函数的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "reg51.h"
#include "intrins.h"	 //移位必须用的语句
typedef unsigned char u8;  //变量命名
//typedef unsigned int u16;
sbit srclk=P3^6; //11号引脚,移位寄存器时钟输入
sbit rclk=P3^5;	 //12号引脚,储存寄存器时钟输入
sbit ser=P3^4;	 //14号引脚,串行数据输入
u8 code hanga[]={0x00,0x49,0x49,0x7f,0x49,0x49,0x00,0x00};  //D7-D0,D7最高位
//u8 code hangb[]={0x08,0x10,0x3f,0x49,0x2d,0x7f,0x2d,0x09};  //D7-D0
u8 code lie[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};  //P0^7-P0^0,P0^7是最高位
 

void dbyte(u8 dat) //输入dat到595芯片
{
 	u8 i;		 //变量定义
	srclk=0;	 //初始化
	rclk=0;	
   	
	for(i=0;i<8;i++) //循环移位8次,因为有八次数据
	{
	 
		ser=dat>>7;	//把数据最高位右移到最低位
		dat<<=1;	//然后把后面的数据左移一位
		srclk=1; //上升沿,将数据串行输入
	    _nop_(); //一个机器周期	延时
       	_nop_();
    	srclk=0; //再拉低
}
rclk=1;	//上升沿,将数据送入储存存器
_nop_();//一个机器周期 延时
_nop_();
rclk=0;	//再拉低储存起来
}

void delay(int i)
{
  while(i--);		  //延时函数
  }

void main(void)
{
 	u8 i;				//变量定义

	
  	while(1)
  	{
    	for(i=0;i<8;i++)	//循环8
		{
			P0=lie[i];	  //选通列
			dbyte(hanga[i]);	//送入行
			delay(100);		   //延时
			dbyte(0x00);//消影

  }
 }
} 	


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值