在我的电路中,有7个段引脚位于不同的端口,例如:Seg A至SegD(在RA0至RA4中)SegE(在RF1中)SegF(RG4)SegG(RG3)。我可以一一设置位来计数0到9。我需要计数0-9999,但是ı无法存储值。我该怎么做才能满足我的要求?
#include "mcc_generated_files/mcc.h"
#define DISP1 RD7
#define DISP2 RD6
#define DISP3 RD5
#define DISP4 RD4
#define SEGA RA0
#define SEGB RA1
#define SEGC RA2
#define SEGD RA3
#define SEGE RF1
#define SEGF RG4
#define SEGG RG3
void main(void)
{
// initialize the device
SYSTEM_Initialize();
TRISD = 0x00; // Set All Pins To Be Output Pins
PORTD = 0x00; // Initially Clear All The 8-Pins
while(1)
{
SEGA=1;SEGB=1;SEGC=1;SEGD=1;SEGE=1;SEGF=1;SEGG=0;DISP4=1;//0
__delay_ms(500);
SEGA=0;SEGB=1;SEGC=1;SEGD=0;SEGE=0;SEGF=0;SEGG=0;DISP4=1;//1
__delay_ms(500);
SEGA=1;SEGB=1;SEGC=0;SEGD=1;SEGE=1;SEGF=0;SEGG=1;DISP4=1;//2
__delay_ms(500);
SEGA=1;SEGB=1;SEGC=1;SEGD=1;SEGE=0;SEGF=0;SEGG=1;DISP4=1;//3
__delay_ms(500);
SEGA=0;SEGB=1;SEGC=1;SEGD=0;SEGE=0;SEGF=1;SEGG=1;DISP4=1;//4
__delay_ms(500);
SEGA=1;SEGB=0;SEGC=1;SEGD=1;SEGE=0;SEGF=1;SEGG=1;DISP4=1;//5
__delay_ms(500);
SEGA=1;SEGB=0;SEGC=1;SEGD=1;SEGE=1;SEGF=1;SEGG=1;DISP4=1;//6
__delay_ms(500);
SEGA=1;SEGB=1;SEGC=1;SEGD=0;SEGE=0;SEGF=0;SEGG=0;DISP4=1;//7
__delay_ms(500);
SEGA=1;SEGB=1;SEGC=1;SEGD=1;SEGE=1;SEGF=1;SEGG=1;DISP4=1;//8
__delay_ms(500);
SEGA=1;SEGB=1;SEGC=1;SEGD=1;SEGE=0;SEGF=1;SEGG=1;DISP4=1;//9
__delay_ms(500);
}
答案 0 :(得分:0)
一些提示:
如果要使用4位数字,则必须多路复用显示。
在表格中定义每个数字:
const uint8_t LEDTable[10] = {0b00111111, //led drive for 0
0b00000110, //led drive for 1
....
0b01101101}; //led drive for 9
在中断例程中执行多路复用。
在中断中,必须为每个数字进行输出:
一个
十
迅雷...
每个数字的输出如下:
SEGA = (value & 0x01) ? 1:0;
SEGB = (value & 0x02) ? 1:0;
SEGC = (value & 0x04) ? 1:0;
SEGD = ...