#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);
}
蓝桥杯模板(四) 数码管
于 2023-03-21 21:40:35 首次发布
该代码实现了一个用于数码管显示的C语言程序,包括Seg_Trans和Seg_Disp两个函数,将字符转换为段码并显示在特定位置。Seg_Trans处理字符到段码的转换,Seg_Disp负责在指定位置更新数码管显示。程序中还包含了一个中断服务函数t2int,用于滚动显示和刷新数码管。
摘要由CSDN通过智能技术生成