天天看點

單片機與嵌入式系統實驗-流水燈實驗

  • 實驗目的要求

根據原理圖完成仿真電路的繪制;能夠根據設計需求完成代碼編寫,實作功能;能夠獨立完成軟體、硬體功能測試

  • 實驗内容

(1)閱讀普中開發闆原理圖,在proteus上完成仿真電路圖設計,包括LED燈(使用P3口)、矩陣按鍵。

(2)矩陣按鍵功能配置設定:最左上角按鍵K0---流水燈啟動,最右上角按鍵K3---流水燈停止,

最左下角按鍵K12---流水燈從上往下流水;最右下角按鍵K15---流水燈從下往上流水。

同時在最右面的數位管上顯示對應的按鍵号碼(靜态顯示即可),注意初始狀态時哪個按鍵都沒有按下過,流水燈全滅,數位管全滅。

  • 實驗過程

流程圖:

單片機與嵌入式系統實驗-流水燈實驗

仿真電路圖:

單片機與嵌入式系統實驗-流水燈實驗

實作代碼:

#include<reg51.h>
char code led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
char code key_buf[] = {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
					0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
char code led[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
	
	void delay10ms(void)
	{
		unsigned char i,j;
		for(i=20;i>0;i--)
		for(j=248;j>0;j--);
			}

	char getkey(void){
		char key_scan[] = {0xef,0xdf,0xbf,0x7f};
		char i = 0, j = 0;
		for (i = 0; i < 4; i++)
		{
			P2 = key_scan[i];
			if((P2&0x0f) != 0x0f){
				for(j = 0; j< 16; j++){
					if (key_buf[j] == P2)
						return j;
					
				}
			}
		}
		return -1;
	}

	void main(void){
		char k;
		char key = 0;
		P0 = 0x00;
		P3 = 0xff;
		while(1){
			key = getkey();
			
			if(key != -1){
				P0 = led_mod[key];
						if (key == 15){
							for (k = 0; k < 8; k++){
								P3 = led[k];
								delay10ms();
								delay10ms();
								}
							}
						else if(key == 12){
							for (k = 0; k < 8 ; k++){
								P3 = led[7 - k];
								delay10ms();
								delay10ms();
								}
							}
						else if(key = 3){
								break;
								}

						}
					} 
					}
           

運作截圖:

單片機與嵌入式系統實驗-流水燈實驗
  • 實驗總結
  1. 進一步掌握了通過鍵碼的方式對矩陣鍵盤的掃描,也學習了LED流水燈的電路結構。
  2. 掌握了基本的流水燈的設計原理。
  3. 學習了流程圖的繪制。