/************* 技术支持与购买说明 **************
产品主页:http://tw51.haohaodada.com
淘宝搜索:天问51,可购买。目前基础版99元,带彩屏标准备版149元
技术支持QQ群一:1138055784
******************************************/
#include "hc595.h"
#include "nixietube.h"
//段码
//0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,-,NONE
code uint8 _nix_seg[18]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF};
//显示缓存
xdata uint8 _nix_display_buff[8]={17,17,17,17,17,17,17,17};
//小数点位置
uint8 _nix_point_bit=0;
//冒号显示标志位
uint8 _nix_colon_flag=0;
//========================================================================
// 描述: 数码管显示初始化.
// 参数: none.
// 返回: none.
//========================================================================
void nix_init()
{
hc595_init();
NIXIETUBE_PORT_MODE();//推挽输出
NIXIETUBE_PORT=0xff;
//左侧数码管冒号
LEFT_COLON_PIN_MODE();//推挽输出
LEFT_COLON_PIN = 1;
//右侧侧数码管冒号
RIGHT_COLON_PIN_MODE();//推挽输出
RIGHT_COLON_PIN = 1;
}
//========================================================================
// 描述: 数码管位显示.
// 参数: (0~15),0:小数点不显示;1:小数点显示.
// 返回: none.
//========================================================================
void nix_Display(uint8 dat,uint8 point)
{
if(point)
{
NIXIETUBE_PORT=_nix_seg[dat] & 0x7F;
}
else
{
NIXIETUBE_PORT=_nix_seg[dat];
}
}
//========================================================================
// 描述: 数码管扫描回调函数(需要在1ms定时器中断函数里调用,总周期16ms<视觉20ms).
// 参数: none.
// 返回: none.
//========================================================================
void nix_scan_callback()
{
static uint8 flag;
static uint8 index = 0;
static uint16 count = 0;
flag=~flag;
if(flag)
{
if(_nix_colon_flag)
{
count++;
if(count>500)//1秒冒号切换状态
{
if(_nix_colon_flag == 1)
{
RIGHT_COLON_PIN^=1;
}
else
{
LEFT_COLON_PIN^=1;
}
count = 0;
}
}
nix_Display(_nix_display_buff[index],0x01&(_nix_point_bit>>index));//显示段码
hc595_bit_select(index);//显示位码
index++;
if(index > 7)
{
index = 0;
}
}
else
{
hc595_bit_disable();// 消影
}
}
//========================================================================
// 描述: 数码管显示整数.
// 参数: (-9999999~99999999).
// 返回: none.
//========================================================================
void nix_display_num(int32 num)
{
int32 temp;
uint8 i;
nix_disable_time();//冒号不显示
if(num>=0)
{
for(i=0;i<8;i++)
{
temp=num%10;
num=num/10;
_nix_display_buff[i]=temp;
if(num == 0)
{
break;
}
}
}
else//负数
{
num = -num;
for(i=0;i<8;i++)
{
temp=num%10;
num=num/10;
_nix_display_buff[i]=temp;
if(num == 0)
{
_nix_display_buff[i+1]=16;//添加负号
break;
}
}
}
}
//========================================================================
// 描述: 数码管显示浮点数.
// 参数: 浮点数,精度(1,2,3,4).
// 返回: none.
//========================================================================
void nix_display_float(float num, uint8 precision)
{
uint8 i;
int32 temp;
int32 int_part,float_part;
nix_disable_time();//冒号不显示
int_part = (int32)num/1;
switch(precision)
{
case 1:float_part = (int32)(num*10)%10;break;//保留1位精度
case 2:float_part = (int32)(num*100)%100;break;//保留2位精度
case 3:float_part = (int32)(num*1000)%1000;break;//保留3位精度
case 4:float_part = (int32)(num*10000)%10000;break;//保留4位精度
default:float_part = (int32)(num*10)%10;break;//保留1位精度
}
if(float_part<0)
{
float_part = -float_part;
}
for(i=0;i<8;i++)
{
temp=float_part%10;
float_part=float_part/10;
_nix_display_buff[i]=temp;
if(float_part == 0)
{
break;
}
}
_nix_point_bit = (0x01 <<(i+1));//显示小数点
if(int_part>=0)
{
for(i=i+1;i<8;i++)
{
temp=int_part%10;
int_part=int_part/10;
_nix_display_buff[i]=temp;
if(int_part == 0)
{
break;
}
}
}
else
{
int_part = -int_part;
for(i=i+1;i<8;i++)
{
temp=int_part%10;
int_part=int_part/10;
_nix_display_buff[i]=temp;
if(int_part == 0)
{
_nix_display_buff[i+1]=16;//添加负号
break;
}
}
}
}
//========================================================================
// 描述: 数码管显示时间.
// 参数: 小时,分,0:左侧;1:右侧.
// 返回: none.
//========================================================================
void nix_display_time(uint8 h,uint8 m,uint8 dir)
{
uint32 temp;
temp = h*100+m;
if(dir)
{
nix_display_num(temp);
_nix_colon_flag = 1;
}
else
{
temp = temp*10000;
nix_display_num(temp);
nix_display_clear_bit(0);
nix_display_clear_bit(1);
nix_display_clear_bit(2);
nix_display_clear_bit(3);
_nix_colon_flag = 2;
}
}
//========================================================================
// 描述: 数码管不显示冒号.
// 参数: none.
// 返回: none.
//========================================================================
void nix_disable_time()
{
_nix_colon_flag = 0;
RIGHT_COLON_PIN=1;
LEFT_COLON_PIN=1;
}
//========================================================================
// 描述: 数码管清屏.
// 参数: none.
// 返回: none.
//========================================================================
void nix_display_clear()
{
uint8 i;
for(i=0;i<8;i++)
{
_nix_display_buff[i]=17;
}
_nix_point_bit=0;
}
//========================================================================
// 描述: 数码管指定位显示.
// 参数: (0~7).
// 返回: none.
//========================================================================
void nix_display_bit(uint8 nbit,uint8 dat)
{
_nix_display_buff[nbit]=dat;
}
//========================================================================
// 描述: 数码管清指定位.
// 参数: (0~7).
// 返回: none.
//========================================================================
void nix_display_clear_bit(uint8 nbit)
{
_nix_display_buff[nbit]=17;
}
//========================================================================
// 描述: 数码管显示时钟函数.
// 参数: none.
// 返回: none.
//========================================================================
void display_RTC(uint8 hour,uint8 minute,uint8 second)
{
if(hour >= 10) _nix_display_buff[7] = hour / 10;
else _nix_display_buff[7] = 0x11;
_nix_display_buff[6] = hour % 10;
_nix_display_buff[5] = 0x10;
_nix_display_buff[4] = minute / 10;
_nix_display_buff[3] = minute % 10;
_nix_display_buff[2] = 0x10;
_nix_display_buff[1] = second / 10;
_nix_display_buff[0] = second % 10;
}
C51单片机-利用定时器测量脉冲宽度
151 浏览量
2024-03-07
22:55:41
上传
评论
收藏 100KB ZIP 举报
美容仪发烧友
- 粉丝: 199
- 资源: 17
最新资源
- 交口汾石_2024-05-06_062133.dat
- Example1.java
- test1.ncl
- BatchAddLineAction.java
- matlab中的算术运算符介绍
- 形势与政策-题库.xls
- 高效MySQL查询加速指南:索引策略、查询优化、性能调优,助力数据库管理员和开发者突破性能瓶颈
- ARM Limited 发布的《RealView 编译工具 4.0 版编译器参考指南》
- 《2024音视频技术发展报告》,由LiveVideoStack出品,旨在深入了解流媒体和RTC(实时通信技术)的从业情情况
- 2023-04-06-项目笔记 - 第一百二十五阶段 - 4.4.2.123全局变量的作用域-123 -2024.05.06
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈