这只是我第二次在这里提出问题。上次非常有帮助,所以我想我会重新访问,因为我被困在另一个 C 项目上!
我只是补充一点,我或多或少是 C 的总 n00b,但知道几乎足以在最少的帮助下尝试这个(直到现在!)而且我不是要求有人为我做这件事,只是为了几个指向正确方向的指针(没有双关语)。
我已经在这个主题上进行了相当多的谷歌搜索,但我正在尽力不只是从一些在线资源中复制和粘贴代码,因为我想从中学习,所以我正在尝试自己开发代码.
然后我要做的是:我已经为自己构建了一个 PIC 开发板,其中两个共阴极 7 段显示器连接到 '877A 的 PORTD。我已将 RB0 和 RB1 连接到打开 7 段的晶体管,并用简单的代码测试了所有内容,它工作正常,因此电路完全没有问题。我设法创建了一个从 0-9 计数的程序,这是非常基本的,我现在决定尝试多路复用并从 0-99 计数。我已经编写了一些代码并将其发布在下面,我想请人向我指出我做错了什么。到目前为止,我的个位数是 0-9,但十位数字似乎停留在 0。
我有一种感觉,我遗漏了一些东西,但我不知道是什么。我可能也有点过于复杂了。
我正在尝试制作一个用作温度传感器的程序,该程序使用热敏电阻分压器电路输入到 PIC 的 ADC(这是我的实际项目)并在多路复用显示器上显示该值实际上不是项目的一部分(我们只应该使用在“2”和“5”和“C”之间交替的一位数字“25C”等),但我想更进一步,所以我我试图开发这个改进版本。
无论如何,这已经够我胡说八道了,我将代码粘贴进去,希望有人能提供帮助。
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#pragma config CP = OFF, DEBUG = OFF, PWRTE = OFF
#pragma config CPD = OFF, LVP = OFF
#pragma config BOREN = OFF, WRT = OFF
#pragma config WDTE = OFF, FOSC = HS
#define _XTAL_FREQ 8000000
void segments (int digits);
int main(int argc, char** argv) {
TRISD = 0x00; //creates an output
TRISB = 0x00;
PORTD = 0x00; //sends zeros to all bits of port D
PORTB = 0x00;
int i,j,num,tens,units,digits;
do {
for (i=0;i<100;i++)
{
units=i%10; //extract units digit
num=i-units; //takes units away leaving multiple of 10
tens=num%10; //extract tens digit
for(j=0;j<20;j++) //should display each ten and unit for 200ms
{
RB0=1; //switch on units segment
RB1=0;
digits=units;
segments(digits);
__delay_ms (5);
RB0=0;
RB1=1;
digits=tens;
segments(digits);
__delay_ms (5);
}
}
}while (1); //do while runs forever
return (EXIT_SUCCESS);
}
void segments (int digits)
{
switch (digits)
{
case 0:
PORTD=0x3F; //zero
break;
case 1:
PORTD=0x06; //one
break;
case 2:
PORTD=0x5B; //two
break;
case 3:
PORTD=0x4F; //three
break;
case 4:
PORTD=0x66; //four
break;
case 5:
PORTD=0x6D; //five
break;
case 6:
PORTD=0x7D; //six
break;
case 7:
PORTD=0x07; //seven
break;
case 8:
PORTD=0x7F; //eight
break;
case 9:
PORTD=0x6F; //nine
break;
}
}
如果我忘记添加任何内容,请告诉我。非常感谢您的帮助!