//==宣告區================================
#include
#include "myio.h" // 自己寫的I/O程式庫
sbit PB1=P2^0; // 宣告PB1=P2.0
sbit PB2=P2^1; // 宣告PB2=P2.1
sbit PB3=P2^2; // 宣告PB3=P2.2
sbit PB4=P2^3; // 宣告PB4=P2.3
//==主程式================================
main() // 主程式開始
{
P2=0xff; // 規劃P2輸入埠
while(1) // 無窮迴圈,程式一直跑
{
{
alter(3); // 高低位元交互閃爍三次
flash(3);} // 全燈閃爍三次
else if (PB2==0)// 如果按下PB2
{
left(3); // 單燈左移三圈
flash(3);} // 全燈閃爍三次
else if (PB3==0)// 如果按下PB3
{
right(3); // 單燈右移三圈
flash(3);} // 全燈閃爍三次
else if (PB4==0)// 如果按下PB4
{
SEG(3); // 霹靂燈三圈
flash(3);} // 全燈閃爍三次
} // while迴圈結束
} // 主程式結束
/* myio.h - 自己寫的程式庫 */
//==宣告區==============================
#define LED P1 // 定義LED接至Port 1
void debouncer(void); // 宣告防彈跳函數
void delay10ms(int); // 宣告10毫秒延遲函數
void alter(int); // 宣告交互閃爍函數
void left(int); // 宣告單燈左移函數
void right(int); // 宣告單燈右移函數
void pili(int); // 宣告霹靂燈函數
void SEG(int); // 宣告7
//==自己寫的副程式========================
/* 防彈跳函數函數,延遲約20ms */
void debouncer(void) // 防彈跳函數開始
{
} // 防彈跳函數結束
/* 延遲函數開始,延遲約x 10ms */
void delay10ms(int x) // 延遲函數開始
{
for (i=0;i
} // 延遲函數結束
/* 高低位元交互閃爍函數,執行x次 */
void alter(int x) // 高低位元交互閃爍函數開始
{
LED=0x0f; // 初始狀態(高位元亮,低位元滅)
for(i=0;i<2*x-1;i )// i變數for迴圈執行2x-1次
{
LED=~LED; // LED反相輸出
} // i變數for迴圈結束
delay10ms(50); // 延遲50 10m=0.5s
} // 高低位元交互閃爍函數結束
/* 全燈閃爍函數,執行x次 */
void flash(int x) // 全燈閃爍函數開始
{
LED=0x00; // 初始狀態(全亮)
for(i=0;i<2*x-1;i )// i變數for迴圈執行2x-1次
{
LED=~LED; // P0反相輸出
} // i變數for迴圈結束
delay10ms(50); // 延遲50 10m=0.5s
} // 全燈閃爍函數結束
/* 單燈左移函數,執行x圈 */
void left(int x) // 單燈左移函數開始
{ int i, j; // 宣告變數i,j
for(i=0;i
for(j=0;j<7;j )// j迴圈,左移7次
{ delay10ms(25); // 延遲25 10m=0.25s
LED=(LED<<1)|0x01; // 左移1位後,LSB設為1
} // j迴圈結束
delay10ms(25); // 延遲25 10m=0.25s
} // i迴圈結束*/
} // 單燈左移函數結束
/* 單燈右移函數,執行x圈 */
void right(int x) // 單燈右移函數開始
{ int i, j; // 宣告變數i,j
for(i=0;i
for(j=0;j<7;j )// j迴圈,右移7次
{ delay10ms(25); // 延遲25 10m=0.25s
LED=(LED>>1)|0x80; // 左移1位後,MSB設為1
} // j迴圈結束
delay10ms(25); // 延遲25 10m=0.25s
} // i迴圈結束
} // 單燈左移函數結束
/* 霹靂燈函數,執行x圈 */
void SEG(int x) // 7函數開始
{int i;
/* 七段顯示器資料區*/
unsigned char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
{
for(i=0;i<10;i ) //重複執行10次
{
P0=table[i]; //將table值取出後送至P2
delay10ms(25); //延遲500ms
}
}
}
沒有留言:
張貼留言