?? main.c
字號:
/********************************************************************************************************
說明: 使用了外部中斷4,定時器中斷1,實現了跑馬燈程序
本程序通過按鍵S1改變LED燈工作的數量,按鍵S2改變LED燈閃爍的頻率,實現跑馬燈的效果
要求:打開撥碼開關J8
*********************************************************************************************************/
#include <sh88f516.h>
unsigned char Num,Fnum;
unsigned char Disp;
unsigned char Time0Count;
bit DispFlag;
void mcu_init();
main()
{
mcu_init();
while(1)
{
if(DispFlag)
{
DispFlag = 0;
P0 = (P0&0xFC) | (Disp&0x03); //端口0的低2位對應LED燈的D2 D3
P1 = (P1&0x03) | (Disp&0xFC); //端口1的高6位對應LED燈的D4-D9
Disp <<= 1;
if(CY)
Disp |= 0x01;
}
}
}
void mcu_init()
{
CLKCON = 0x60; //系統頻率=晶振頻率/12
P0M0 = 0x00;
P0M1 = 0xFF; //推挽輸出模式
P1M0 = 0x00;
P1M1 = 0xFF; //推挽輸出模式
IENC = 0x70; //0111 0000 外部中斷4的選擇寄存器,1-打開,0-關閉
EXF0 = 0x80; //上升沿觸發
TH0 = 0xFA;
TL0 = 0x00;
TMOD = 0x01; // Timer 0 is 16-bit counter, timer mode
ET0 = 1; //enable timer 0 interrupt
TR0 = 1; //enable timer 0
IEN1 = 0x40; //ELPD EX4 EPWM ESCM ECMP1 ES1 ECMP0 ESPI 0100 0000
EA = 1; //開啟總中斷
Num = 0;
Fnum = 4;
DispFlag = 1;
P0 = 0;
P1 = 0;
P2 =P2 |0x80;
Disp = 0x01;
}
void Timer0_int() interrupt 1
{
Time0Count++;
if(Time0Count>=Fnum)
{
Time0Count = 0;
DispFlag = 1;
}
}
void EX4_INT() interrupt 13 //using 2 //外部中斷4的中斷號為13.
{
IEN1 &= 0xBF;
if(IF45) //P2.5對應于板子上的S2
{
Fnum--;
if(Fnum==0)
Fnum = 6;
}
if(IF46) //P2.6對應于板子上的S1
{
Num++;
if(Num==5)
Num = 0;
switch(Num)
{
case 0: Disp = 0x01;
break;
case 1: Disp = 0x03;
break;
case 2: Disp = 0x0F;
break;
case 3: Disp = 0x11;
break;
case 4: Disp = 0x55;
break;
default: Disp = 0x00;
break;
}
}
EXF1 = 0x00; //需要軟件清0
IEN1 |= 0x40;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -