蓝桥杯单片机使用定时器刷新数码管

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

@蓝桥杯单片机使用定时器刷新数码管

提示:以下是本篇文章正文内容,下面案例仅供参考

使用步骤


使用定时器刷新数码管的显示步骤如下:

1.消隐
2.送位选
3.送段码


HC138_SMG.c模块:

#include "HC138_SMG.h"

unsigned char code segtab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};  // 段选
unsigned char code weitab[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};  // 位选
unsigned char tabbuf[] = {1,2,3,4,5,6,7,8};  // 数据缓冲区,初始数码管显示12345678

void Timer1Init(void)		//1毫秒@12.000MHz
{
	AUXR &= 0xBF;		//定时器时钟12T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0x18;		//设置定时初值
	TH1 = 0xFC;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	EA = 1;
	ET1 = 1;
}

void HC138(unsigned char ch)
{
	P2 &= 0x1f;
	P2 |= (ch << 5);
	P2 &= 0x1f; 
}
void ALL_Init()
{
	P0 = 0xff; HC138(4);
	P0 = 0x00; HC138(5);
	P0 = 0x00; HC138(6);
	P0 = 0xff; HC138(7);

	Timer1Init();
}
void DisPlay()
{
	static unsigned char i;
	// 消隐
	P0 = 0xFF; HC138(7);
	// 送位选
	P0 = weitab[i]; HC138(6);
	// 送段码
	P0 = segtab[tabbuf[i]]; HC138(7);
	
	i++;
	if(i == 8)
		i = 0;  // 这里写等于8,不然可能造成数码管有一个不会点亮
}

HC138_SMG.h模块:

#ifndef __HC138_SMG_H_
#define __HC138_SMG_H_

#include <STC15F2K60S2.H>

void ALL_init();
void Timer1Init(void);
void Display();

#endif

主函数部分

代码如下(示例):

#include <STC15F2K60S2.H>
#include "HC138_SMG.h"

void main(void)
{
	ALL_Init();  // 外设初始化
	while(1);
}
void T1() interrupt 3
{
	Display();  // 中断1ms进入一次,由于定时器是自动重载模式,这里我们就不需要赋初值
}

总结

以上就是今天要讲的内容,本文简单用代码实现定时器刷新数码管,读者参考即可。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值