創作內容

7 GP

【發明設計】動畫計時器(單晶片微電腦版)

作者:【科嵐組織】優嵐│2017-12-10 19:27:04│巴幣:14│人氣:772
  動畫計時器用於動畫製作的時間計算上,此設計共有6種幀率可選擇,8、10、12、15、24、30fps,以滿足不同幀律動畫的需求。

【電路】




【機殼】


【內部】


幀率接口選擇,5號(8fps)、7號(10fps)、8號(12fps)、9號(15fps)、10號(24fps)、11號(30fps)。

【成品】







【影片】

【特點】
89S52 TQFP封裝,晶片小型化。
OLED模組,輕薄、無須背光、顯示清晰,IIC傳輸,接線數僅4條。
USB供電,免電池,只需連接充電器、行動電源、電腦等具備USB裝置即可使用。
外殼嵌入式組裝,無螺絲設計。
體積輕薄,尺寸5.5cm*5cm*1.4cm,重量約45公克。

【功能、規格】
計時 持續按下『計時』開關
停止 放開『計時』開關
重置 按下『重置』開關
幀率切換 按下『幀率切換』按鍵
幀率接口選擇 以接線方式
5號(8fps)
7號(10fps)
8號(12fps)
9號(15fps)
10號(24fps)
11號(30fps)
幀率選擇數 6種,8、10、12、15、24、30fps
計時上限 100秒歸0
電源 5V
尺寸 5.5cm*5cm*1.4cm
重量 約45公克

【使用材料】
項目 數量 單價 總價
AT89S52 24AU TQFP 1 36 36
TQFP DIP 轉接板 1 14 14
OLED模組 白色 128*64 1 130 130
電阻100kΩ 1 0.2 0.2
陶瓷電容30PF(30) 2 1 2
陶瓷電容0.1uF(104) 1 1 1
4P小按鍵 1 3 3
常開開關 2 10 20
石英晶體24MHz 1 10 10
USB公頭 1 6 6
裸銅線 1
多芯線26AWG 1
硬紙板1000磅 1
軟紙板 1
A4白紙(Double A 80磅) 1
透明塑膠片 1
總價 222.2

【程式架構】
程式組 程式
宣告 各幀率脈波數陣列
計時、重置、幀率切換,開關接口
初始幀率選擇接口(6個)
OLED模組串列接口
幀率選擇、秒、格、格進位數值變數
ASCII編碼陣列8*16點
中文字編碼陣列16*16點
延遲 延遲(for迴圈)
OLED IIC開始
IIC停止
OLED_IIC數據寫入
OLED輸入指令
OLED輸入資料
OLED設定座標
OLED全螢幕顯示
OLED初始設定
顯示一列8*16點陣ASCII字型(英文字)
顯示一字8*16點陣字型(數字)
顯示一字16*16點陣字型(中文字)
顯示計時數字 顯示計時數字
計時器 計時計數器2資料設定
計時計數器2中斷
主程式 OLED初始設定
Timer2中斷源致能
幀率初始設定(初設為10fps)
顯示初始畫面
硬體接口選擇
顯示計時數字
停止、幀率切換、重置、顯示計時數字判斷程式
備註 藍色字為副程式
紅色字為無限迴圈(while迴圈)內的程式
※程式碼不公開。

【計時計數器】
  利用89S52的計時計數器2(Timer2)計數,使用自動載入模式。
  中斷程式(interrupt)進行『秒』、『格』、『格進位』數值進位。
  『格進位』→進位→『格』→進位→『秒』。

  TL2=(65536-脈波數)%256 (低位8位元暫存器,輸入預設脈波數)。
  TH2=(65536-脈波數)/256 (高位8位元暫存器,輸入預設脈波數)。
  RCAP2L=TL2   (TL2資料載入儲存RCAP2L,需自動載入時將其資料載入TL2)。
  RCAP2H=TH2   (TH2資料載入儲存RCAP2H,需自動載入時將其資料載入TH2)。
  脈波數=500000/fps(此以6MHz為基準計算)。

幀率 脈波數
8 62500
10 50000
12 41667
15 33333
24 20833
30 16667

  當中斷1次時,『格進位』數值加1。
  當『格進位』大於等於4次時,『格』數值加1,『格進位』數值歸0。
  此進位方式以符合24MHz(石英晶體頻率)。

【中文字編碼方式】
  由於OLED模組與LCD模組不同,本身不具備字庫編碼,所以須自行設計文字編碼。
  ※購買OLED模組賣方會提供取字軟體,但只能輸入ASCII和簡體中文,繁體中文不適用。

  中文字顯示大小設定為16*16點。
  以『動』字為範例,取0~3欄,0~7列。

□□□□□□□□□□□□□□□□0
□□□□□■■■□□□■□□□□
□■■■■■□□□□□■□□□□
□□□□■□□□□□□■□□□□
□■■■■■■■□□□■□□□□
□□□□■□□□■■■■■■■□
□■■■■■■■□□□■□□■□
□■□□■□□■□□□■□□■□7(列)
□■■■■■■■□□□■□□■□
□■□□■□□■□□□■□□■□
□■■■■■■■□□□■□□■□
□□□□■□□□□□■□□□■□
□■■■■■■■□□■□□□■□
□□□□■□□□□■□□■□■□
□■■■■■■■■□□□□■■□
□□□□□□□□□□□□□□□□
0      7(欄)

0~3欄
0~7列
第0欄
0~7列
第1欄
0~7列
第2欄
0~7列
第3欄
0~7列
□□□□←最低位元
□□□□
□■■■
□□□□

□■■■
□□□□
□■■■
□■□□
←最高位元




























16進制編碼(c51) 0x00 0xd4 0x54 0x54

【OLED輸入顯示一字】
  ※由於程式構成複雜,需自行摸索賣方提供的OLED範例程式,才可理解其概念。

  顯示一字16*16點陣字型(中文字)為範例。
  以『動』字為範例,『第0欄0~7列』的編碼為0x00,0x00佔一個位元組(Byte),『第1欄0~7列』的編碼為0xd4,0xd4也佔一個位元組(Byte),以此類推。
  『0~7列』有16欄,佔16個位元組。
  『8~15列』有16欄,佔16個位元組。
  一個中文字總共佔32個位元組。
  在顯示中文字『動』,假如該字編號為1,1*32,取『中文字編碼陣列16*16點』中第32個位元組資料(0x00)。
  執行for迴圈1次後,編號遞增(加1),取第33個位元組資料(0xd4),以此類推。

  由於OLED設定8列一組結合成1列,『0~7列』為第一列,『8~15列』為第二列。

【程式範例】
void OLED_print_one_16x16(unsigned char column,row,SEG)//顯示一字16*16點陣字型。
{
  unsigned char i=0;
  SEG=SEG*32;    //1個字佔32個位元組(Byte),每個字的排序須乘32。
  column=column*8;  //1個字佔欄16個像素點,欄須乘2和乘8(8欄一組,共16組模式),避免覆蓋顯示前一字。

  OLED_SetPos(column,row);   //顯示字的上半部,(第一列)。
  for(i=0;i<16;i++)   //共16欄,故計算16次。
  {
    OLED_data(F16x16[SEG]);
    SEG++;
  }
  OLED_SetPos(column,row+1);  //顯示字的下半部,(第二列)。
  for(i=0;i<16;i++)   //共16欄,故計算16次。
  {
    OLED_data(F16x16[SEG]);
    SEG++;
  }
}
『column』欄
『row』列
『SEG』陣列編號
『OLED_SetPos(column,row)』OLED設定座標

【OLED 顯示】
  OLED模組具有128*64個顯示像素點,欄128,列64。
  OLED設定8列一組結合成1列,64/8=8,共有8列。
  『8欄一組,共16組模式』為8欄一組結合成1欄,128/8=16,共16欄。

  假如『動』字要顯示在藍色方塊的區域,需從第3欄,第0列開始顯示。
  (column,row,SEG):(3,0,1)。
  假如『畫』字要顯示在紅色方塊的區域,需從第5欄,第0列開始顯示。
  (column,row,SEG):(5,0,2)。

   0123456789ABCDEF欄(8欄一組)
  0□□□■■■■□□□□□□□□□
  1□□□■■■■□□□□□□□□□
  2□□□□□□□□□□□□□□□□
  3□□□□□□□□□□□□□□□□
  4□□□□□□□□□□□□□□□□
  5□□□□□□□□□□□□□□□□
  6□□□□□□□□□□□□□□□□
  7□□□□□□□□□□□□□□□□
  列(8列一組)

【硬體接口】
電路板編號 單晶片接口 功能
1 P1.5 MOSI
2 P1.6 MISO
3 P1.7 SCK
4 RESET 單晶片重置
58 Vcc 5V正電源
44 EA 正電源,內部記憶體
21 GND 接地
22 GND 接地
19 XTAL 石英晶體
20 XTAL 石英晶體
62 P1.2 計時
61 P1.1 重置
63 P1.3 幀率切換
38 P2.5 OLED SDA
40 P2.7 OLED SCL

  顯示數字原本是要採用12*24點的大小,但會造成『格』數字顯示跳號,推測是數字編碼大小較大(佔36個位元組),資料傳輸至OLED時,可能中斷程式已執行數次,使『格』的數值也增加數次,當在資料傳輸結束後,再傳輸下個資料至OLED時,『格』數值已超過,造成顯示跳號。
  簡單來說,推測是『資料傳輸』速度跟不上『計時』速度。
  目前顯示數字是使用8*16點大小的數字編碼(佔16個位元組),顯示數字會較小。

  此動畫計時器設計比較需要花心思在OLED顯示與設計文字編碼上。OLED顯示方式是先指定螢幕顯示位置,再將文字編碼一欄一欄傳輸,運作概念不容易理解。設計文字編碼要先將文字以小方塊繪製出來,再逐欄逐列編碼,還要檢查編碼是否正確,需要花上不少時間。


創作者 優嵐     
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3816239
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:科嵐工作室

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

7喜歡★colann 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【模型開箱】10週年紀念... 後一篇:【繪圖創作】【科嵐工作室...

追蹤私訊切換新版閱覽

作品資料夾

colanncolann
想找各個領域的創作者們,一起交集、交談、交流、交涉、交友、交往! >.0看更多我要大聲說昨天22:27


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】