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

📄 hc74164_7seg.c

📁 模数转换
💻 C
字号:
//************************************************************
//Copyright(C)2008,桂林电子科技大学电子工程学院科技协会
//				     HC74164_7SEG 四位数码管驱动源文件
//文件名称:HC74164_7SEG.c
//文件标识:(内参)
//摘    要:
//			1.配合头文件使用;
//			2.硬件参考作品;
//			3.
//
//当前版本:1.0
//作    者:覃秋霖
//完成日期:2008.10.10
//
//取代版本:无
//原 作 者:无
//完成日期:无
//
//		 	HC74164_7SEG_SER 	   ----------	P0^0
//			HC74164_7SEG_CLK	   ----------   P0^1
//			HC74164_7SEG_MR 	   ----------	P0^2
//			HC74164_7SEG_S0	       ----------	P0^6
//			HC74164_7SEG_S1        ----------	P0^5
//			HC74164_7SEG_S2        ----------   P0^4	
//			HC74164_7SEG_S3        ----------   P0^3
//
//***********************************************************

#include<reg52.h>
#include"Mylib.h"
#include"./HC74164_7SEG_driver/HC74164_7SEG.h"

static  uchar  DDRAM[]={ 0x00,0x00,0x00,0x00 };

uchar code TAB_SEG[16]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//0,1,2,3,4,5,6,7
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//8,9,a,b,c,d,e,f

//*******************模块内部函数声明************************
static void delay10ms(void);
static  void Set_Pos_7seg(uchar  position);
static  void show_pattern(uchar Pos, uchar *pattern, uchar Len);

//*******************************************
//函数名称:static void delay10ms(void)
//函数功能: 延时函数
//形式参数:	 无
//行参说明:	 无		
//返回参数:	 无
//使用说明:	 无
//*******************************************
static void delay10ms(void)
{
   uchar i,j;
   for(i=0;i<50;i++)
   for(j=0;j<10;j++);
}

//*******************************************
//函数名称:static  void Set_Pos_7seg(uchar  position)
//函数功能: 使能数码管的指定位
//形式参数:	 uchar  position
//行参说明:	 位置(从 0 到 4)		
//返回参数:	 无
//使用说明:	 position 数值为0时表示关闭显示
//*******************************************
static  void Set_Pos_7seg(uchar  position) 
{
	 switch(position)
	 {
	 	   case  0:
		      HC74164_7SEG_S0 = 0; 
	 		  HC74164_7SEG_S1 = 0;
	 		  HC74164_7SEG_S2 = 0;
	 		  HC74164_7SEG_S3 = 0;
			  break;
	 	   case  1:
		      HC74164_7SEG_S0 = 0; 
	 		  HC74164_7SEG_S1 = 1;
	 		  HC74164_7SEG_S2 = 1;
	 		  HC74164_7SEG_S3 = 1;
			  break;
	 	   case  2:
		      HC74164_7SEG_S0 = 1; 
	 		  HC74164_7SEG_S1 = 0;
	 		  HC74164_7SEG_S2 = 1;
	 		  HC74164_7SEG_S3 = 1;
			  break;	 
	 	   case  3:
		      HC74164_7SEG_S0 = 1; 
	 		  HC74164_7SEG_S1 = 1;
	 		  HC74164_7SEG_S2 = 0;
	 		  HC74164_7SEG_S3 = 1;
			  break;	 
	 	   case  4:
		      HC74164_7SEG_S0 = 1; 
	 		  HC74164_7SEG_S1 = 1;
	 		  HC74164_7SEG_S2 = 1;
	 		  HC74164_7SEG_S3 = 0;
			  break;	  
	 }
}

//*******************************************
//函数名称:extern  void  show_DDRAM()
//函数功能: 把显示缓存的数据送往数码管显示
//形式参数:	 无
//行参说明:	 无		
//返回参数:	 无
//使用说明:	 调用 DDRAM 显示缓存的数据
//*******************************************
extern  void  show_DDRAM()
{
		uchar i;
		uchar j;
		uchar   ucDTemp;
		uchar   ucBit;

		Set_Pos_7seg(0);
		HC74164_7SEG_MR = 0;

		for(i = 0; i<4; i++)
		{
			ucDTemp = DDRAM[i];
			ucBit = 0x80;
			HC74164_7SEG_MR = 1;

			for(j = 0; j<8; j++)
			{
			    HC74164_7SEG_CLK = 0;
				HC74164_7SEG_SER = ucDTemp & (ucBit >> j);
				HC74164_7SEG_CLK = 1;
			}

			Set_Pos_7seg(i+1);
			delay10ms();
			HC74164_7SEG_MR = 0;
			Set_Pos_7seg(0);
		}
}

//*******************************************
//函数名称:static  void show_pattern(uchar Pos, uchar *pattern, uchar Len)
//函数功能: 把Len长度的数据填到显示缓存的Pos位置
//形式参数:	 uchar Pos, uchar *pattern, uchar Len
//行参说明:	 无		
//返回参数:	 无
//使用说明:	 Len 以字节为单位
//*******************************************
static  void show_pattern(uchar Pos, uchar *pattern, uchar Len)
{
	   uchar  i;

	   for(i = 0; (i<Len) && ((Pos + i) < 4 ); i++)
	   {
	   		  DDRAM[Pos + i] = *pattern;
	   		  pattern ++; 
	   }
}

//*******************************************
//函数名称:extern  void clear_DDRAM(void)
//函数功能:  无
//形式参数:	 无
//行参说明:	 无		
//返回参数:	 无
//使用说明:	 无
//*******************************************
extern  void clear_DDRAM(void)
{
	  uchar i;

	  for(i = 0; i<4; i++)
	  {
	  	  DDRAM[i] = 0x00;
	  }
}

//*******************************************
//函数名称:extern  void display_LED_number_int(uchar Pos, ulong Num)
//函数功能:  无
//形式参数:	 无
//行参说明:	 无		
//返回参数:	 无
//使用说明:	 无
//*******************************************
extern  void display_LED_number_int(uchar Pos, uint Num)
{

	uchar count,temp[5],Flag = 1;

	for(count=5;count;)				//将Num的高(低)位放在数组temp的低(高)位中
	{
		temp[--count]=Num%10;
		Num/=10;
	}
	for(count=0;count<10;count++)	//从Num的高位开始显示
	{	
	  if (temp[count] != 0||Flag==0)  //巧妙采用一个标志位来消除前面显示的零
	  {
      show_pattern( Pos, TAB_SEG + temp[count], 1);
	  Pos ++;
	  Flag = 0;
	  }
	 }
}











⌨️ 快捷键说明

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