不知道为什么整体赋值会闪奇怪的值,所以先试试单个数码管赋值的方式
//seg.c
#include "sge.h"
unsigned char seg_dat[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
unsigned char seg_pos[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void Seg_Disp(unsigned char dat,pos,point)
{
P0 = 0xff;
P2 = P2 & 0x1f | 0xe0;
P2 &= 0x1f;
P0 = seg_dat[dat];
P2 = P2 & 0x1f | 0xc0;
P2 &= 0x1f;
P0 = seg_pos[pos];
if(point)
P0 &= 0x7f;
P2 = P2 & 0x1f | 0xe0;
P2 &= 0x1f;
}
//main.c
#include "seg.h"
#include "stdio.h"
unsigned char num;
unsigned char seg_buf[8]={10,10,10,10,10,10,10,10};
unsigned char seg_ponit[8]={0,0,0,0,0,0,0,0};
unsigned char seg_pos;
unsigned char seg_down;
bit seg_disp_flag;
bit seg_spark_flag;
void tm1_isr() interrupt 3
{
static unsigned int t_400ms;
if(++seg_down== 500) seg_down = 0;
if(++seg_pos==8) seg_pos=0;
Seg_Disp(seg_buf,seg_buf[seg_pos],seg_point[seg_pos]);
if(++t_400ms==400)
{
t_400ms=0;
seg_disp_flag^=1;
}
}
void Seg_Proc(void)
{
//减速写吐了,省略
//想显示的-?-ffff22.5
float k;
//如果第7位有小数点
seg_point[6]=1;
seg_buf[0] = seg_buf[2] = 11;
seg_buf[1] = num+1;
seg_buf[5] = (unsigned char)k/10;
seg_buf[6] = (unsigned char)k%10;
seg_buf[7] = (unsigned int)(k*10)% 10;
if(seg_spark_flag==1)
{
//全熄灭
for(unsigned char i=0;i<8;i+)
{
seg_buf[i]=10;
}
}
else if(seg_spark_flag==2)
{
seg_buf[0]=seg_buf[2]=seg_disp_flag?10:11;
seg_buf[1]=seg_disp_flag?10:num+1;
}