チーム1349
課題名
PSoC フラッシュ暗算
研究者名
2-14-39 中川智博
2-14-40 永富康太郎
使用器具
PSoC 1個
MiniProg 1個
ジャンパ線 2本
概要
写真のようにランダムに4つの数値が表示され、最後に解答を要求する”Please answer...”が出力される。
また、スイッチを押すと答えが表示されるようになっている。
ソース(main.c)
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#include <stdlib.h>
#pragma interrupt_handler myISR
int TC = 0;
int s = 0;
unsigned int adc_data;
#define SW 0b00010000
void myISR(void)
{
char line[16]; int r[4]; TC += 1; //TC = TC + 1 if(TC == 1){ srand((int)adc_data); r[0]=rand()%100; LCD_1_Position(0,0); itoa(line,r[0],10); LCD_1_PrString(line); } if(TC == 2){ r[1] = rand()%100; LCD_1_Position(0,0); itoa(line,r[1],10); LCD_1_PrString(line); } if(TC == 3){ r[2]= rand()%100; LCD_1_Position(0,0); itoa(line,r[2],10); LCD_1_PrString(line); } if(TC == 4){ r[3] = rand()%100; LCD_1_Position(0,0); itoa(line,r[3],10); LCD_1_PrString(line); s = r[0]+r[1]+r[2]+r[3]; } if(TC == 5){ LCD_1_Position(0,0); LCD_1_PrCString("Please answer..."); }
}
void main(void)
{
char line[16]; PGA_Start(PGA_HIGHPOWER); ADCINC_Start(ADCINC_HIGHPOWER); ADCINC_GetSamples(0); M8C_EnableGInt; LCD_1_Start(); LCD_1_PrCString("Select Number..."); LCD_1_Control(0x01); Timer16_1_EnableInt(); Timer16_1_Start(); //while(1){ while(ADCINC_fIsDataAvailable() == 0); adc_data = ADCINC_wClearFlagGetData(); //} PRT1DR &= (~SW); while(1){ if(PRT1DR & SW){ itoa(line,s,10); LCD_1_Init(); LCD_1_Position(0,0); LCD_1_PrString(line); } else { PRT1DR &= (~SW); } }
}
考察
今回の実習では、ディスプレイに表示される数値が大きくなり過ぎない事、点滅のスピードが速過ぎない事、乱数を生成出来る事の三点に力を入れました。
本来はディスプレイに表示された数値に対する解答をUARTを使ってキーボードによる入力を実現し、あっているかの真偽を確かめ、正解なら"Congratulations!!"不正解なら正解を出力する機能を作りたかったのですが、時間の関係上実現する事が出来ませんでした。
そこで、スイッチを用いて、答えだけでも表示出来るように設計しました。
しかし、スイッチの設計時の条件に"全ての数字が表示された後"という条件が無かったので、表示中にスイッチを押しても出力されてしまうというバグが発生してしまいました。
- 最終更新:2013-10-22 16:44:02