合泰HT66F0185 LED数码管时钟

前言

        该项目使用HT-IDE3000开发,安装教程可参考HT-IDE3000使用手册

规格书:

        项目使用HT66F0185芯片,HT66F0185规格书

        看规格书是写项目很重要的一部分,建议大家多看 多配。

实现代码: 可以借鉴,别直接抄!!!

    

A B C D E F G H DP 8个段为数码管的段选,com1234四个位为数码管的位选。

fcb30e0a88ae4435ae6412dca57d4256.pngf9a8ffb316964edc8e9c09206b3d5d35.png

 原理图上就是这样的,我第一次看的时候就很懵,***为什么和我学的51上的原理图不一样 数码管的图呢,就很搞,刚学看不懂,然后我在网上找了张图

e272eecea95747c4b92493552455fe98.png

 其实就是这样的,只是省略掉了那4个8.     

数码管这边采用的是在头文件中直接进行数字的定义,一般都是采用数组定义,将10位数字定义到数组中,需要使用的时候直接取数组位。

数码管显示 首先定义一个显示数组time_table,接着定义一个时间变量timemode,并且在头文件中宏定义时间名对应123(这边定义写在了时间模块头文件中),当timemode为12小时制的时候显示数组time_table=time_12H,以此类推写出24小时制、年、月日、闹钟。

接下去就是位选,位选的话直接写一个循环 数码管是四位的 循环的最大值就是4,flash_location_flag这个变量为数码管闪烁位,因为在时间设置中需要选中位,选中了就需要闪烁,当flash_location_flag为0的时候数码管4位都闪烁,为1时后两位闪烁,为2时前两位闪烁,switch(i)就是正常显示的位选了,switch(time_table[i])为时间数组中对应位应该显示的数字。

下面的话就是数码管闪烁函数

location 表示数码管的位置,nixie_flash_flag表示闪烁标志位,初始值位0,nixie_flash_on_cnt表示闪烁亮灭时间计时器,nixie_flash_off_cnt为暗灭时间计时器,nixie_flash_state表示当前闪烁状态。

先判断闪烁为是否为0,是0的话就说明数码管是亮着的,接着将闪烁亮灭计时器减,然后判断计时器是不是0,该不该结束闪烁了,将闪烁标志位设置位0 这是闪烁暗灭计时器位1000 设置闪烁状态为0。最后根据当前的闪烁状态去决定是否让该函数数码管闪烁。

          数码管头文件  nixie.h

#ifndef __NIXIE_H__
#define __NIXIE_H__



#define com1 _pc5
#define com2 _pa3
#define com3 _pb6
#define com4 _pb4

#define A	_pa1
#define B	_pb5
#define C	_pa7
#define D	_pa5
#define E	_pd1
#define F 	_pa2
#define	G	_pb3
#define	DP	_pd2
#define	H	_pa0


#define	num0	A=0;B=0;C=0;D=0;E=0;F=0;G=1;
#define	num1	A=1;B=1;C=1;D=1;E=0;F=0;G=1;
#define	num2	A=0;B=0;C=1;D=0;E=0;F=1;G=0;
#define	num3	A=0;B=1;C=1;D=0;E=0;F=0;G=0;
#define	num4	A=1;B=1;C=0;D=1;E=0;F=0;G=0;
#define	num5	A=0;B=1;C=0;D=0;E=1;F=0;G=0;
#define	num6	A=0;B=0;C=0;D=0;E=1;F=0;G=0;
#define	num7	A=1;B=1;C=1;D=0;E=0;F=0;G=1;
#define	num8	A=0;B=0;C=0;D=0;E=0;F=0;G=0;
#define	num9	A=0;B=1;C=0;D=0;E=0;F=0;G=0;
#define nixie_close		A=1;B=1;C=1;D=1;E=1;F=1;G=1;DP=1;


extern unsigned char alarmSelect;

void delay(unsigned long int ms);
void nixie_init();
void nixie_sht();
void nixie_show();
void nixie_shanshuo(unsigned char location);
void digdisplay();

#endif

数码管.c文件 nixie.c

#include <HT66F0185.H>
#include "time.h"
#include "key.h"
#include "nixie.h"

unsigned char nixie_table[] = {0,0,0,0};	//显示数组

	

/*
*延时函数
*/
void delay(unsigned long int ms)
{
	while(ms--)
		GCC_DELAY(2000);
}
/*
*初始化数码管寄存器
*/
void nixie_init()
{
	_pcc5=0;	
	_pac3=0;
	_pbc6=0;
	_pbc4=0;
	
	_pac1=0;
	_pbc5=0;
	_pac7=0;
	_pac5=0;
	_pdc1=0;
	_pac2=0;
	_pbc3=0;
	_pdc2=0;
	_pac0=0;
	_pcc4=0;
	
	_cos=1;
	_csel=0;
}

/*
*	将显示数组按照对应的时间配置变量配置到对应的时间数组
*/
void nixie_sht()
{
	if(timemode==0)
	{
		nixie_table[0]=20;
		nixie_table[1]=20;
		nixie_table[2]=20;
		nixie_table[3]=20;
		
	}
	else if(timemode==_12H)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值