PIC入門1,跑馬燈和數(shù)碼管顯示實(shí)驗(yàn)
我使用的是愛晶3ePIC實(shí)驗(yàn)板,以下都是自己寫的程序,只是為了紀(jì)念和學(xué)習(xí)交流使用,別無(wú)它意。在我的
相冊(cè)里有板子的原理圖。
跑馬燈實(shí)驗(yàn):
程序:
//適合3epic實(shí)驗(yàn)板,是跑馬燈程序
#include
unsigned int i;
//主函數(shù)
main()
{
TRISD=0X00;//D口為輸出模式,接LED的正極
TRISE=0X00;//E口為輸出輸出模式,LED使能,接LED的負(fù)極
while(1)
{
PORTE=0X00;
PORTD=0X01;//點(diǎn)亮第一個(gè)LED
for(i=0;i<50000;i++);//延時(shí)
PORTD=0X02;//點(diǎn)亮第二個(gè)LED
for(i=0;i<50000;i++);
PORTD=0X04;
for(i=0;i<50000;i++);
PORTD=0X08;
for(i=0;i<50000;i++);
PORTD=0X10;
for(i=0;i<50000;i++);
PORTD=0X20;
for(i=0;i<50000;i++);
PORTD=0X40;
for(i=0;i<50000;i++);
PORTD=0X80;
for(i=0;i<50000;i++);
}
}
數(shù)碼顯示實(shí)驗(yàn):
程序:
//適合3epic實(shí)驗(yàn)板,是LED顯示數(shù)據(jù)實(shí)驗(yàn)
#include
#include
volatile unsigned char data;
static volatile int table[]={
0X3F,0X06,0X5B,0X4F,
0X66,0X6D,0X7D,0X07,
0X7F,0X6F,0X77,0X7C,
0X39,0X5E,0X79,0X71};
volatile unsigned char data;
//主函數(shù)
main()
{
unsigned i,a;
TRISB=0x00;//段選控制為輸出
TRISD=0x00;//位選控制位輸出
while(1)
{
for(i=0;i<16;i++)
{
PORTB=0xE0;//段選
data=table[i];
PORTD=data;//位選
for(a=0;a<50000;a++);//延時(shí)
}
}
}
單鍵控制LED燈。
程序:
//適合3ePIC實(shí)驗(yàn)板,單按鍵控制一個(gè)LED燈
#include
#include
//系統(tǒng)初始化
void initial()
{
TRISE=0x00;//E口為輸出
TRISB=0xFF;//B口為輸入
TRISD=0x00;//D口為輸出
}
//主函數(shù)
main()
{
initial();
PORTE=0x00;//控制LED燈的負(fù)極
while (1)
{
if(RB0==0)//如果sw7按下,則LED0亮
PORTD=0x01;
else
PORTD=0x00;//沒有按鍵按下,LED0滅
}
}
鍵盤控制數(shù)碼管實(shí)驗(yàn):
因?yàn)闆]有加去鍵抖動(dòng),所以編的不是很好,事情一忙就沒有修改。
程序:
//適合3EPIC實(shí)驗(yàn)板,鍵盤控制數(shù)碼管
#include
#include
unsigned int i;
unsigned char j;
//初始化
void initial()
{
TRISB=0x1E;
TRISD=0x00;
j=0;
}
//延時(shí)
void DELAY()
{
for(i=0;i<50000;i++)
continue;
}
//主函數(shù)
main()
{
static int table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71};
initial();
RB5=0;
while (1)
{
if(RB1==0)
{
DELAY();
j=1;
}
if(RB2==0)
{
DELAY();
j=2;
}
if(RB3==0)
{
DELAY();
j=3;
}
if(RB4==0)
{
DELAY();
j=4;
}
PORTD=table[j];
}
}