📄 hc74164_7seg.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 + -