蓝桥杯单片机——锁存器、数码管、定时器的基本操作

锁存器

蓝桥杯的锁存器可以直接背,这里就不再赘述

数码管的基本原理

共阳数码管:将所有发光二极管的阳极接到一起形成公共阳极的数码管,且公共极接VCC
共阴数码管:将所有发光二极管的阴极接到一起形成公共阴极的数码管,且公共极接GND
简单来说,共阳数码管低电平点亮,共阴数码管高电平点亮


蓝桥杯开发板上使用的是共阳数码管。例如,将第一个数码管的位置点亮,并显示位数字0,则需要给P0口赋值的16进制位0xc0(~0x3f)

dp g f e d c b a 
 1 1 0 0 0 0 0 0 

使用STC-ISP辅助写共阴数码管的段码和位码

// 前面记得定义类型 
typedef unsigned char u8; 
typedef unsigned int u16; 
 
/*************  本地常量声明    **************/ 
u8 code t_display[]={                       //标准字库 
//   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F 
    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71, 
//black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y 
    0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e, 
    0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1 
 
u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};      //位码 
 
使用延时函数显示静态数码管 
只需要在main函数的while(1)当中调用如下函数,注意x需要定义在全局变量的位置 
u8 x; 
void SmgUseDelay() 
{ 
        P2=0xc0;P0=0x00;P2=0x00; 
        P2=0xe0;P0=~t_display[x];P2=0x00; 
        P2=0xc0;P0=T_COM[x];P2=0x00; 
 
        x++; 
        if (x == 8) x = 0 ; 
        Delay2ms(); 
} 
 

定时器的基本原理

使用STC-ISP生成定时器

 void Timer0Init(void)                //100微秒@11.0592MHz 
{ 
        AUXR |= 0x80;                //定时器时钟1T模式 
        TMOD &= 0xF0;                //设置定时器模式 
        TL0 = 0xAE;                //设置定时初值 
        TH0 = 0xFB;                //设置定时初值 
        TF0 = 0;                //清除TF0标志 
        TR0 = 1;                //定时器0开始计时 
 
        // 下面需要自己加上 
        ET0 = 1;    // 打开定时器0中断 
        EA = 1;    // 打开总中断 
} 

定时器方法显示静态数码管

静态变量(static )属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束。
全局变量全都是静态变量,局部变量加上关键字static后才是静态变量。
如下为定时器0的中断服务函数,当定时器0触发后,CPU会执行中断服务函数下面的程序

void timer0() interrupt 1 using 1        //中断号 和 寄存器 
{ 
        static int smg_cnt = 0, i = 0; 
        smg_cnt ++ ; 
        if (smg_cnt == 2) 
        { 
                smg_cnt = 0; 
                P2=0xc0;P0=0x00;P2=0x00; 
                P2=0xe0;P0=~t_display[i];P2=0x00; 
                P2=0xc0;P0=T_COM[i];P2=0x00; 
                i++; 
                if (i == 8) i = 0 ; 
        } 
} 
 
外部中断 
外部中断无法用STC-ISP生成,需要手动配置。当然不会配置的同学也可以参考STC-ISP软件中的范例程序。 

外部中断配置的函数如下,同时初始化外部中断0和外部中断1

void Int_init(void) 
{ 
        IT0 = 1;//配置成下降沿触发 
        EX0 = 1;//配置外中断0使能 
 
        IT1 = 1;//配置成下降沿触发 
        EX1 = 1;//配置外中断1使能 
 
        EA = 1;//打开总中断 
 
} 

外部中断0的上升沿和下降沿标志位是INT0,可以通过改变P32口的电平来触发,蓝桥杯板子上P32口连接按键S5.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值