HC6812 マイクロコントローラーをプログラミングしていますが、C で次の 2 つの関数を使用する必要があります。
ポート B の LED をオフにします
PTH (ポート H) のスイッチ入力ビット 0 ~ 4 を読み取る
ポート A の 7 セグメント ディスプレイにスイッチ値を表示します。
スイッチで設定された 0 ~ 31 秒間、ポート B のすべての LED を点灯させます。
最後に、ポート B のすべての LED をオフにします。
私の 2 つの機能は、Hexled
(16 進スイッチの入力と 7 セグメントの表示を読み取る) とwait
(遅延を作成する) です。
コードをコンパイルすると、次の 4 つのエラーが表示されます。
Hexled
関数定義で 'pointer expected' が 2 回発生します
'関数の引数宣言が競合していますHexled
'
'の再宣言エラーHexled
'
C/C++ の関数では、関数プロトタイプ、関数定義、およびメイン ループでその関数を呼び出す必要があることを理解しています。私は自分が何を間違えたのか理解できず、そこから学びたいと思っています。多数の C プログラミング Web ページを調査してみました。
#include <stdio.h>
void wait(int);
void hexled (unsigned char,unsigned char);
unsigned char switchdata;
unsigned char a;
unsigned char b;
unsigned char mask;
unsigned char index;
unsigned char index1;
/******************* Declare the port addresses **********************/
unsigned char *PORTA = (unsigned char *)0x0000;
unsigned char *DDRA = (unsigned char *)0x0002;
unsigned char *PORTB = (unsigned char *)0x0001;
unsigned char *DDRB = (unsigned char *)0x0003;
unsigned char *PTH = (unsigned char *)0x0260;
unsigned char *DDRH = (unsigned char *)0x0262;
unsigned char *PERH = (unsigned char *)0x0264;
unsigned char LED_data[16] = {0x3F,
0x6,
0x5B,
0x4F,
0x66,
0x6D,
0x7D,
0x7,
0x7F,
0x6F,
0x77,
0x7C,
0x39,
0x5E,
0x79,
0x71}; // LED output
int main(void)
{
/******************* Set up I/O ports********************************/
*DDRH = 0x00; /* make Port H an input port */
*PERH = 0xFF; /* enable Port H */
*DDRA = 0xFF; /* make Port A an output port */
*DDRB = 0xFF; /* make Port B an output port */
/******************* Main loop ***************************************/
*PORTB = 0xFF;
mask = 0b00001111;
switchdata = *PTH & mask;
switchdata = *PORTA;
index = (switchdata & 0b00010000);
index1 = (switchdata | mask);
hexled(index,index1);
*PORTB = 0X00;
wait(31);
*PORTB = 0xFF;
asm ("swi");
return 0;
}
// ***************************HEX FUNCTION**********************************
void hexled(a,b) //* HEXLED function definition
{
if (a)
{
*PORTA = switchdata [b] & 0b00010000;
}
else
{
*PORTA = switchdata [b] | mask;
}
}
// ***************************DELAY FUNCTION************************************
void wait(int seconds) //*WAIT function defintion
{
int x,y,z;
for (x=0; x<seconds; x++)
{
for (y=0; y<=100; y++)
{
for (z=0; z<=2000; z++);
}
}
}