2019年8月8日 星期四

8051 test

/* 多重按鈕開關 */
//==宣告區================================
#include // 定義8051暫存器之標頭檔,P2-17~19 
#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() // 主程式開始 
{

 LED=0xff; // 初始狀態(LED全滅)
  P2=0xff; // 規劃P2輸入埠 
while(1) // 無窮迴圈,程式一直跑 
{

 if (PB1==0) // 如果按下PB1
 {

   debouncer();// 防彈跳 
  alter(3); // 高低位元交互閃爍三次 
  flash(3);} // 全燈閃爍三次 
 else if (PB2==0)// 如果按下PB2
 {

   debouncer();// 防彈跳 
   left(3); // 單燈左移三圈 
   flash(3);} // 全燈閃爍三次 
else if (PB3==0)// 如果按下PB3

  debouncer();// 防彈跳 
 right(3); // 單燈右移三圈 
 flash(3);} // 全燈閃爍三次 
else if (PB4==0)// 如果按下PB4

 debouncer();// 防彈跳 
 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) // 防彈跳函數開始 
{

  delay10ms(2); // 延遲約20ms 
} // 防彈跳函數結束 
/* 延遲函數開始,延遲約x 10ms */
void delay10ms(int x) // 延遲函數開始 
{

  int i,j; // 宣告整數變數i,j
  for (i=0;i for (j=0;j<1200;j ); // 計數1200次,延遲約10ms 
} // 延遲函數結束 
/* 高低位元交互閃爍函數,執行x次 */
void alter(int x) // 高低位元交互閃爍函數開始

 int i; // 宣告變數i
 LED=0x0f; // 初始狀態(高位元亮,低位元滅)
 for(i=0;i<2*x-1;i )// i變數for迴圈執行2x-1次 
{

 delay10ms(50); // 延遲50*10m=0.5s
 LED=~LED; // LED反相輸出 
} // i變數for迴圈結束 
delay10ms(50); // 延遲50 10m=0.5s 
} // 高低位元交互閃爍函數結束 
/* 全燈閃爍函數,執行x次 */
void flash(int x) // 全燈閃爍函數開始
{

 int i; // 宣告變數i
 LED=0x00; // 初始狀態(全亮)
for(i=0;i<2*x-1;i )// i變數for迴圈執行2x-1次 
{

 delay10ms(50); // 延遲50 10m=0.5s
 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 { LED=0xfe; // 初始狀態=1111 1110
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 { LED=0X7f; // 初始狀態=0111 1111
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 

}
}

沒有留言:

張貼留言

algorithm

 #include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv)  { for(int j=2;j<=100;j++)//j...