我正在学习PIC(pic18f4550),这对于微控制器编程来说还是一个新手。我尝试在PORTA上获得三个按钮的值,然后通过74LS595将其发送到8x8 LED矩阵作为X坐标。问题是当按下按钮创建不同的值时,转到led矩阵的值不会改变。我在Proteus上进行模拟,所以我想我不需要去抖动功能。 这是我的代码和原理图:
#include<p18f4550.h>
#define SCK LATBbits.LATB0
#define DATA PORTBbits.RB1
#define SCL PORTBbits.RB2
void Data_in(unsigned char k){
DATA=k;
SCK=0;
SCK=1;
}
void LatchData(){
SCL=0;
SCL=1;
}
void Send1byte(unsigned char data)
{
unsigned char i,temp;
for(i=0;i<8;i++)
{
temp = data & (1<<i);
if(temp)
{
DATA = 1;
}
else
{
DATA = 0;
}
SCK = 0;
SCK = 1;
}
SCL = 0;
SCL = 1;
}
unsigned char getMatrixX(unsigned char in_X)
{
switch(in_X)
{
case 0: // the value stuck here
return 0b01111111;
case 1:
return 0b10111111;
case 2:
return 0b11011111;
case 3:
return 0b11101111;
case 4:
return 0b11110111;
case 5:
return 0b11111011;
case 6:
return 0b11111101;
case 7:
return 0b11111110;
default:
return 0b11111111;
}
}
void main()
{
TRISA = 1;
TRISC = 1;
TRISB = 0;
TRISD = 0;
PORTD = 0x80;
while(1){
Send1byte(getMatrixX(LATA));
}
}
这是我原理图的链接: my schematic
真的很感激任何解决方案和建议。抱歉我的英语不好。
答案 0 :(得分:1)
RA0的模拟功能:RA3是真正的问题,因此添加这些将解决:
ADCON1 = 0x0F; // All digital inputs
CMCON = 0x07; // Comparators off (note this is the POR default)
感谢大卫在这个问题:https://electronics.stackexchange.com/questions/111614/pic-programming-get-value-of-multiple-buttons-to-a-port/111625?noredirect=1#111625,他解释得非常好。