提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@蓝桥杯单片机使用定时器刷新数码管
提示:以下是本篇文章正文内容,下面案例仅供参考
使用步骤
使用定时器刷新数码管的显示步骤如下:
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进入一次,由于定时器是自动重载模式,这里我们就不需要赋初值
}
总结
以上就是今天要讲的内容,本文简单用代码实现定时器刷新数码管,读者参考即可。