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

📄 74hc164.c

📁 用两个8字数码管循环的从左到右的显示0-7数字.
💻 C
字号:

/***********************************************************************
*
*	试验74HC164
* 功能:8个数码管上循环显示不同的数字及字母,且每一次只有一位数码亮
* 点亮的顺序是从右到左循环的显示
* 日期:2009-04-08
*	版本:V1.1
************************************************************************/

#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

char code reserve[3] _at_ 0x3b; //保留0x3b开始的3个字节【ICE52】

sbit Led = P2^0;

sbit Ls164_Dat = P2^2;
sbit Ls164_Clk = P2^1;
sbit a0=ACC^0;
//共阴极数码管码表	
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80};//0-.


//共阳极数码管码表
//uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f};//0-.

void Delay_Ls164(uint i)
{
uint j;
for(;i>0;i--)
	for(j=13000;j>0;j--)
		{;}
}	 

void SendByte(uchar Byte)//网上找到的1,测试OK	,【产生的代码是CODE:126 】
{
uchar i,Date;
i=8;
do
	{
	 Date = Byte & 0x80;	//低7位清0
	 Byte <<= 1;				 //向左移一位
	 
	 Ls164_Clk=0;
	 
	 Ls164_Dat=Date;
	 
	 //Ls164_Clk=0;
	 Ls164_Clk=1;		 //上升沿脉冲触发移位
	}
while(--i != 0);
}	 



/*void SendByte(uchar Byte)	//网上找到的2,测试OK	,【产生的代码是CODE:129 】
{
uchar num,t;
num=tab[Byte];
for(t=0;t<8;t++)
	{
	Ls164_Clk=0;
	Ls164_Dat = num & 0x80;
	//Ls164_Dat = num & 0x01;	//如果是共阳,用此行代码
	Ls164_Clk=1;			//上升沿脉冲触发移位
	num <<= 1;
	//num >>= 1;		//如果是共阳,用此行代码
	}
}	*/		 

/*void SendByte(uchar Byte)	 //唐	,会显示,经修改,测试ok【产生的代码是CODE:131 】
{
uchar num,t;
num=tab[Byte];
for(t=0;t<8;t++)
	{
	if(num&0x80)  Ls164_Dat=1;
	//	if(num&0x01)  Ls164_Dat=1;//如果是共阳,用此行代码
	else Ls164_Dat=0;

	 	num <<= 1;
		//num >>= 1;		//如果是共阳,用此行代码
		Ls164_Clk=0;
		Ls164_Clk=1;		 //上升沿脉冲触发移位

	}
}	   */

/*void SendByte(uchar Byte)	 //维纳,测试ok ,【产生的代码是CODE:129 】
{
uchar i;
for(i=0;i<8;i++)
	{
	if(Byte&0x80)	 //从数据的高位开始送
	// if(Byte&0x01) //如果是共阳,用此行代码
		Ls164_Dat=1;
	else 
		Ls164_Dat=0;

	Byte <<=1;		 //向左移一位
	//Byte >>=1;	 //如果是共阳,用此行代码

	Ls164_Clk=0; //下降沿将数据写入164

//	_nop_();
	Ls164_Clk=1;			//上升沿脉冲触发移位
	}
}	 	 */



void main()
{
uchar h,Shift;
		
		Shift=0xef;		 //位扫描初值
		Led=0;
		Ls164_Clk=0;
		P0=0xff; //关闭显示,数码管位
	
		SendByte(0x00);		//关闭数码管显示【共阴极】
		
		_nop_();_nop_();
		_nop_();_nop_();
		_nop_();_nop_();

while(1)
	{

	for(h=0;h<8;h++)	 //循环字形表里面的7个数
		{
	
		SendByte(tab[h]);	//适用维纳函数,网上找到的1,送段码
		
		P0 = Shift;					//送位码
		Shift = _crol_ (Shift,1);	 //左移一位,修改位码

	//	SendByte(h);		 //适用网上找到的2 , 唐

		Delay_Ls164(15);

		}
		h=0;
	}
}




















⌨️ 快捷键说明

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