/************* 技术支持与购买说明 **************
产品主页: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单片机驱动8个数码管
共36个文件
obj:6个
h:6个
c:6个
0 下载量 109 浏览量
2024-03-07
22:52:22
上传
评论
收藏 107KB ZIP 举报
温馨提示
C51单片机驱动8个数码管,C语言程序,可供初学者参考
资源推荐
资源详情
资源评论
收起资源包目录
03-驱动8个数码管.zip (36个子文件)
03-驱动8个数码管
User
D-LED.c 3KB
MDK
D-LED.uvgui.zly 138KB
led8.lst 2KB
hc595.lst 7KB
D-LED.uvgui.fy 92KB
D-LED.lst 6KB
delay.lst 5KB
nixietube.lst 14KB
D-LED.m51 35KB
sys.lst 1KB
D-LED.uvopt 57KB
Out_File
D-LED.build_log.htm 1KB
D-LED.hex 9KB
hc595.obj 18KB
D-LED 85KB
D-LED.lnp 233B
nixietube.obj 25KB
delay.obj 13KB
led8.obj 9KB
D-LED.obj 16KB
sys.obj 10KB
D-LED.plg 254B
D-LED_uvopt.bak 8KB
D-LED_uvproj.bak 15KB
D-LED.uvproj 14KB
Libraries
STC8HX.h 19KB
sys.h 972B
delay.h 319B
sys.c 248B
delay.c 2KB
Device
led8.h 249B
nixietube.h 1KB
hc595.h 807B
hc595.c 4KB
nixietube.c 8KB
led8.c 836B
共 36 条
- 1
资源评论
美容仪发烧友
- 粉丝: 198
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功