名稱:簡易擺動顯字器的設計
功能:
一、 電路的工作原理
對型號爲MC908GP32的飛思卡爾單片機的最小系統電路圖的繪製(如下圖),根據電路圖焊接MC908GP32的飛思卡爾單片機的最小系統,實現單片機的支撐運行電路。
對MC908GP32的飛思卡爾單片機進行編程,實現16只小燈在間隔一定的時間內不停的閃爍,在擺動電路板的情況下,根據人的視覺暫留,人的肉眼能看到電路板上顯示預定的漢字(我們預定的漢字爲:中國武夷山)。
二、電路原理圖
在protel 99se 中的原理圖如下圖:
三、元件清單:
編號 | 元件名稱 | 元件個數 |
1 | 型號爲MC908GP32的飛思卡爾單片機 | 1個 |
2 | 電阻 | 4個 |
3 | 電容 | 7個 |
4 | 晶振 | 1個 |
5 | 開關 | 1個 |
6 | 紅色LED發光二極管 | 16只 |
7 | 導線 | 若干條 |
四、元器件說明:
型號爲MC908GP32的飛思卡爾單片機一片,用於控制小燈的閃爍。
電阻有:10K的一個,10M的一個,150K的一個,51歐姆的一個
電容有:0.47uf的一個,20pf的一個,15pf的一個,0.1uf的3個,0.01uf的一個,大小爲32.768的晶振一個,開關1個用於實現MC908GP32飛思卡爾單片機的最小系統的工作電路。
紅色LED發光二極管16只,在擺動的情況下用於顯示預定的漢字
實物圖:
實物圖如下:
擺動的時候的效果如下圖:
指導老師:葉希梅 、 蔡闖華
製作人員:傅世興,楊克強,張杭林。
附錄:
實現小燈顯示漢字的部分源碼(用C語言實現):
//[LED.h]小燈驅動頭文件---------------------------------------------
//小燈控制需要用到的頭文件
#ifndef LED_h
#define LED_H
#include "GP32C.h" //映像寄存器名定義
#include "Type.h" //類型別名定義
#include "GeneralFun.h"//延時調用
#define showupD DDRA //方向寄存器
#define showdownD DDRB
#define showup PTA //數據寄存器
#define showdown PTB
#define Width 16
#define TIME 30
//小燈控制相關函數聲明
void LEDinit(void); //定義控制小燈的MCU引腳爲輸出
void ToShow1(const INT8U * LED_buf); //顯示1個字
//void ToShowN(INT8U N, const INT8U * *LED_bufs); //顯示N個字
#endif
//[LED.c]小燈驅動-------------------------------------------------
//本文件包含:
// (1)LEDinit:定義控制小燈的MCU的I/O引腳爲輸出
// (2)LED_L_A:驅動小燈"亮","暗"
//硬件連接:
// (1)本處的小燈是一個發光二極管,由MCU的I/O引腳控制
// (2)控制引腳=高電平時,小燈"暗";反之,小燈"亮"
#include "LED.h" //該頭文件中包含了小燈控制引腳定義和相關函數聲明
//LEDinit:定義控制小燈的MCU引腳爲輸出
//功能:定義控制小燈的MCU引腳爲輸出,並使小燈初始爲暗
//參數:無
//返回:無
void LEDinit(void)
{
//PTA和PTB引腳全爲輸出,且全爲高(暗)
showupD = 0xff;
showdownD = 0xff;
showup = 0xff;
showdown = 0xff;
}
//功能: 顯示一個字符
//參數: LED_buf = 指向字模的指針
//返回:無
void ToShow1(const INT8U * LED_buf)
{
INT16U i;
//開始顯示
for(i = 0; i < Width * 2; ++i)
{
showup = ~LED_buf[i]; //顯示第i列上半部分
showdown = ~LED_buf[++i]; //顯示第i列下半部分
Delay(TIME); //延時
}
//最後關燈
showup = 0xff;
showdown = 0xff;
return;
}
//字模存儲
#include "Type.h" //類型別名定義
#include "stdio.h"
const INT8U LED_buf_1[] =
{//中
0x00,0x00,0xF8,0x03,0x08,0x01,0x08,0x01,0x08,0x01,0x08,0x01,0x08,0x01,0xFF,0xFF,
0x08,0x01,0x08,0x01,0x08,0x01,0x08,0x01,0x08,0x01,0xFC,0x03,0x08,0x00,0x00,0x00
};
const INT8U LED_buf_2[] =
{//國
0x00,0x00,0xFE,0xFF,0x02,0x40,0x0A,0x50,0x8A,0x50,0x8A,0x50,0x8A,0x50,0xFA,0x5F,
0x8A,0x50,0xCA,0x52,0x8E,0x54,0x0A,0x50,0x02,0x40,0xFF,0xFF,0x02,0x00,0x00,0x00
};
const INT8U LED_buf_3[] =
{//武
0x20,0x20,0x20,0x60,0x24,0x3F,0x24,0x20,0x24,0x20,0xE4,0x1F,0x26,0x11,0x24,0x11,
0x20,0x10,0xFF,0x03,0x20,0x1C,0x22,0x20,0x2C,0x40,0x20,0x80,0x20,0xE0,0x00,0x00
};
const INT8U LED_buf_4[] =
{//夷
0x04,0x80,0x04,0x80,0x94,0x47,0x94,0x44,0x94,0x24,0x94,0x24,0x94,0x14,0xFF,0x0F,
0x94,0x14,0x94,0x24,0x94,0x44,0x94,0x54,0xF4,0xA5,0x06,0x9C,0x04,0x80,0x00,0x00
};
const INT8U LED_buf_5[] =
{//山
0x00,0x00,0xF0,0x7F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xFF,0x3F,
0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xF0,0x7F,0x00,0x00,0x00,0x00
};
//字模容器
const INT8U * LED_bufs[] =
{
LED_buf_1, LED_buf_2, LED_buf_3, LED_buf_4, LED_buf_5,
};
INT16U count = sizeof(LED_bufs);