
昨日のエクリプスのLEDテールを見て、PICを使えば制御出来そうやな?などと書いてしまった手前、作らない訳にはいかないので作ってみました。
とりあえず点灯パターンは4種類です。
マイクロチップ社のPIC16F84Aと言うワンチップマイコンを利用しています。
1つ数百円くらいです。
とりあえず電源は乾電池にしました。
すぐに回路が組めるのでブレッドボードは便利ですね。
プログラムはC言語で書きました。
リクエストがあったのでソース公開します。
適当に書いたのでお恥ずかしいプログラムですが。
もっとサブルーチン化すれば良かった…。
------------------------------------------
#include
#include"delay.h"
__CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT);
void ioport(void);
void main()
{
ioport();
while(1)
{
switch(PORTA)
{
case 0b1110:
PORTB=1;
DelayMs(125);
while(PORTB!=0b11111111)
{
PORTB=(PORTB<<1)+1;
DelayMs(125);
}
while(PORTB!=0)
{
PORTB=PORTB<<1;
DelayMs(125);
}
break;
case 0b1101:
PORTB=0b10000000;
DelayMs(125);
while(PORTB!=0b11111111)
{
PORTB=(PORTB>>1)+0b10000000;
DelayMs(125);
}
while(PORTB!=0)
{
PORTB=PORTB>>1;
DelayMs(125);
}
break;
case 0b1011:
PORTB=0b00000000;
DelayMs(125);
PORTB=0b00011000;
DelayMs(125);
PORTB=0b00111100;
DelayMs(125);
PORTB=0b01111110;
DelayMs(125);
PORTB=0b11111111;
DelayMs(125);
PORTB=0b11100111;
DelayMs(125);
PORTB=0b11000011;
DelayMs(125);
PORTB=0b10000001;
DelayMs(125);
break;
case 0b0111:
PORTB=0b10000000;
DelayMs(125);
while(PORTB!=1)
{
PORTB=PORTB>>1;
DelayMs(125);
}
PORTB=1;
DelayMs(125);
while(PORTB!=0b10000000)
{
PORTB=PORTB<<1;
DelayMs(125);
}
break;
default:
PORTB=0b11111111;
break;
}
}
}
void ioport(void)
{
TRISA=0x0f;
TRISB=0;
}
--------------------------------------------
<embed src="http://f.flvmaker.com/decowaku.swf?id=.kHOZLAZ5nWL_REMZ2UHmlfx2C8q4y8z5NVfXaO4mDAqA_YQmfGLa&logoFlg=Y" quality="high" bgcolor="#ffffff" name="FlashMovie" align="middle" width="350" height="370" allowScriptAccess="never" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
Posted at 2007/12/12 13:14:46 | |
トラックバック(0) | 日記