蓝桥杯模板(四) 数码管

该代码实现了一个用于数码管显示的C语言程序,包括Seg_Trans和Seg_Disp两个函数,将字符转换为段码并显示在特定位置。Seg_Trans处理字符到段码的转换,Seg_Disp负责在指定位置更新数码管显示。程序中还包含了一个中断服务函数t2int,用于滚动显示和刷新数码管。
摘要由CSDN通过智能技术生成
#ifndef __SEG_H__
#define __SEG_H__

#include <stc14f2k60s2.h>

void Seg_Trans(unsigned char *seg_buf,unsigend char *seg_string);
void Seg_Disp(unsigned char *seg_buf,unsigned char pos);

#endif

-------------------------------------
//seg.c

#include "seg.h"


void Seg_Trans(unsigned char *seg_buf,unsigend char *seg_string)
{
    unsigned char i,temp,j=0;

    for(i=0;i<8;i++,j++)
    {
        switch(seg_string[j])
        {
            case '0':temp = 0xC0;break;
            case '1':temp =	0xF9;break;
            case '2':temp =	0xA4;break;
            case '3':temp =	0xB0;break;
            case '4':temp =	0x99;break;
            case '5':temp =	0x92;break;
            case '6':temp =	0x82;break;
            case '7':temp =	0xF8;break;
            case '8':temp =	0x80;break;
            case '9':temp =	0x90;break; 

            case 'A':temp = 0x88;break;
            case 'B':temo = 0x83;break;
            case 'C':temp = 0xc6;break;
            case 'D':temp = 0xa1;break;
            case 'E':temp = 0x86;break;
            case 'F':temp = 0x8e;break;
            default:temp=0xff;
        }
        
        if(seg_string[j+1]=='.')
        {
            temp &= 0x7f; //加上小数点
            j++;
        }

        seg_buf[i] = temp;
    }
}

void Seg_Disp(unsigned char *seg_buf,unsigned char pos)
{
    P0 = 0XFF;
    P2 = (P2 & 0X1F) | 0XE0;
    P2 &= 0X1F;

    P0 = 0X01 << pos;
    P2 = (P2 & 0X1F) | 0XC0;
    P2 &= 0X1F;

    P0 = seg_buf[pos];
    P2 = (P2 & 0X1F) | 0XE0;
    P2 &= 0X1F;
}

----------------------------------------
//main
#include "seg.h"
#include "timer.h"

unsigned char seg_buf[8]; //数码管段码
unsigned char seg_string[9]; //数码管寄存器
unsigned char pos=0;//数码管位选

unsigned char Seg_Slow; //数码管降速

void Seg_Proc(void);


void t2int() interrupt 12 
{
    if(++Seg_Slow==500) Seg_Slow=0;

    Seg_Disp(seg_buf,pos);
    if(++pos=8) pos=0;
}


void Seg_Proc(void)
{
    if(Seg_Slow) return;
    Seg_Slow=1;

    Seg_Trans(seg_buf,seg_string);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值