📄 display.c
字号:
#include "extern.h"
#define DISPPORT PORTB
#define SCLK PB1
#define SER PB3
#define RCLK PB2
#define DISPWEI 4
#define SegA 0x40
#define SegB 0x80
#define SegC 0x10
#define SegD 0x04
#define SegE 0x02
#define SegF 0x01
#define SegG 0x20
#define SegH 0x08
const U8 LEDWEI[]={0x08,0x04,0x80,0x40,0x02,0x10,0};
const U8 LEDZM[]=" 0123456789ABCDEFPSIL-.";
const U8 LEDTable[]={ 0,
SegA+SegB+SegC+SegD+SegE+SegF, //0
SegB+SegC,
SegA+SegB+SegG+SegE+SegD,
SegA+SegB+SegC+SegD+SegG,
SegF+SegG+SegB+SegC,
SegF+SegG+SegC+SegD+SegA,
SegA+SegF+SegE+SegD+SegC+SegG,
SegA+SegB+SegC,
SegA+SegB+SegC+SegD+SegE+SegF+SegG,
SegA+SegB+SegC+SegD+SegF+SegG, //9
SegA+SegB+SegC+SegE+SegF+SegG, //A
SegC+SegD+SegE+SegF+SegG, //b
SegD+SegE+SegG, //c
SegB+SegC+SegD+SegE+SegG, //d
SegA+SegD+SegE+SegF+SegG, //E
SegA+SegE+SegF+SegG, //F
SegA+SegB+SegE+SegF+SegG, //P
SegA+SegC+SegD+SegF+SegG, //S
SegB+SegC, //i
SegF+SegE+SegD, //L
SegG, //-
0x60};
U8 DispBuf[6];
U8 *string;
void Disp0(U8 ch);
void DispChange(void)
{
U8 uc0;
for(uc0=0;uc0<DISPWEI+1;uc0++) Disp0(uc0);
}
void Disp0(U8 ch)
{
union{
U16 uint;
U8 uchar[2];
}un;
U8 uc0;
un.uchar[1]=LEDWEI[ch+6-DISPWEI];
un.uchar[0]=DispBuf[ch];
ClrBit(DISPPORT,SCLK);
for(uc0=0;uc0<16;uc0++){
wdt_reset();
ClrBit(DISPPORT,SER);
if(ChkBit(un.uint,15)) SetBit(DISPPORT,SER);
SetBit(DISPPORT,SCLK);
ClrBit(DISPPORT,SCLK);
un.uint<<=1;
}
SetBit(PORTB,RCLK);
ClrBit(PORTB,RCLK);
for(un.uint=0;un.uint<50;un.uint++);
}
void DispVal(U8 ch)
{
U8 uc0;
if(ch<10) Buf[0]=ch+'0';
else Buf[0]=ch-10+'A';
Buf[1]=0;
Div(Voltage.Cur,VOLTAGEREF,4,&Buf[1]);
uc0=0;
while(Buf[uc0])uc0++;
for(;uc0<DISPWEI+1;uc0++){
Buf[uc0]='0';
}
DispStr(Buf);
}
void DispStr(U8 *ptr)
{
U8 uc1,uc2;
uc2=0;
while(*ptr){
for(uc1=0;uc1<24;uc1++){
if(*ptr==LEDZM[uc1]){
if(uc1==22){
uc2--;
DispBuf[uc2] |=SegH;
}else{
DispBuf[uc2]=LEDTable[uc1];
}
break;
}
}
uc2++;
if(uc2>DISPWEI) break;
ptr++;
}
for(;uc2<DISPWEI;uc2++) DispBuf[uc2]=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -