[关闭]
@floatsd 2018-01-18T13:00:19.000000Z 字数 30024 阅读 1119

二进制位运算游戏 Binary bit Trace

CM4实验报告


游戏简介

游戏规则

功能模块

信号 端口 信号 端口
LED0 PF1 LED1 PF2
LED2 PF3 LED3 PL0
LED4 PL1 LED5 PL2
LED6 PL3 LED7 PL4
ROW1_IN PP2 COL1_OUT PD1
ROW2_IN PN3 COL2_OUT PH3
ROW3_IN PN2 COL3_OUT PH2
ROW4_IN PD0 COL4_OUT PM3
BUZZER PM5
  1. IntDefaultHandler, // Timer 0 subtimer A
  2. TIMER0B_Handler, // Timer 0 subtimer B
  3. IntDefaultHandler, // Timer 1 subtimer A
  4. IntDefaultHandler, // Timer 1 subtimer B
信号 端口 信号 端口
CS PE1 BLACKLIGHT PF1
LCD_RESET PF4 LCD_BUSY PB1
PEN* PB0 RS PP5
IMO PL5 WR PE2
RD PE0 DATA0-15

实验原理

游戏设计

具体模块原理

中断

系统时钟

  1. /*******************************************************************
  2. * 函数: Clock_Init()
  3. * 描述: 配置使能系统时钟
  4. * 输入值:无
  5. * 返回值:无
  6. *****************************************************************/
  7. void Clock_Init(){
  8. SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |//外部时钟25MHz
  9. SYSCTL_OSC_MAIN |//OSC时钟源选择主振荡器作为OSC
  10. SYSCTL_USE_PLL |//采用锁相环PLL作为系统时钟源
  11. SYSCTL_CFG_VCO_480), //压控振荡器频率480MHz
  12. sysClock_Fr);//设定系统频率为sysClock_Fr
  13. }

GPIO

  1. /*******************************************************************
  2. * 函数: LED_Init()
  3. * 描述: LED的配置及初始化
  4. * 输入值:无
  5. * 返回值:无
  6. *****************************************************************/
  7. void LED_Init()
  8. {
  9. //使能GPIOF和GPIOL模块
  10. SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
  11. SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL);
  12. //将8盏LED配置为输出模式(GPIO管脚方向)
  13. GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,
  14. GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
  15. GPIOPinTypeGPIOOutput(GPIO_PORTL_BASE,
  16. GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);
  17. }

矩阵按钮

信号 端口 信号 端口
ROW1_IN PP2 COL1_OUT PD1
ROW2_IN PN3 COL2_OUT PH3
ROW3_IN PN2 COL3_OUT PH2
ROW4_IN PD0 COL4_OUT PM3
Created with Raphaël 2.1.2列循环低电平扫描行值有键按下确定是哪个键调用对应程序yesno
  1. IntDefaultHandler, // Timer 0 subtimer A
  2. TIMER0B_Handler, // Timer 0 subtimer B
  3. IntDefaultHandler, // Timer 1 subtimer A
  4. IntDefaultHandler, // Timer 1 subtimer B

LCD屏

  1. TFT彩屏工作原理

    • TFT(Thin Film Transistor)LCD即薄膜场效应晶体管LCD,是有源矩阵类型液晶显示器(AM-LCD)中的一种。和TN技术不同的是TFT的显示采用“背透式”照射方式——假想的光源路径不是像TN液晶那样从上至下,而是从下向上。这样的作法是在液晶的背部设置特殊光管,光源照射时通过下偏光板向上透出。由于上下夹层的电极改成FET电极和共通电极,在FET电极导通时,液晶分子的表现也会发生改变,可以通过遮光和透光来达到显示的目的,响应时间大大提高到80ms左右。因其具有比TN LCD更高的对比度和更丰富的色彩,荧屏更新频率也更快,故TFT俗称真彩。

    • LCD是由二层玻璃基板夹住液晶组成的,形成一个平行板电容器,通过嵌入在下玻璃基板上的TFT对这个电容器和内置的存储电容充电,维持每幅图像所需要的电压直到下一幅画面更新。液晶的彩色都是透明的必须给LCD衬以白色的背光板上才能将五颜六色表出来,而要使白色的背光板有反射就需要在四周加上白色灯光。因此在TFT LCD的底部组合了灯具,如CCFL或者LED。

  2. OTM4001A

    • 控制芯片简介OTM4001A是一款262144色,用于中小型TFT LCD 显示屏的片上系统(SoC)驱动芯片, 通过指定用于图形数据的RAM能支持达240x RGBx432分辨率。OTM4001A内部的时序控制器能为不同的需求提供不同接口方式,OTM4001A提供了系统接口,包括8/9/16/18位并口和SPI串口方式(本实验采用16位并口方式)OTM4001A也提供了6/16/18位RGB接口,用于动态显示图片。OTM4001A的主要特性还有窗口地址功能能限制数据重写区域,并减少数据传输;内部6位D/A转换器输出的64γ颜色校准;内部233280字节的RAM;背光引脚输出控制的内置自适应背光控制功能(CABC);逻辑供电电压范围2.5~3.6V,IO接口支持操作电压1.65~3.6V,模拟供电电压范围2.5~3.6V;内置的内部晶振与硬件复位。
    • 为使液晶正常工作,我们需要在初始化之前先复位液晶,复位液晶的时序特征和时序图如下:
      LCD0.png-56.8kB
    • 为减少数据访问次数,OTM4001A还有窗口访问功能,能指定对液晶的操作区域,相关寄存器如下:
      LCD2.png-153.8kB
      HSA7-0和HEA7-0代表了水平方向的窗口起始和结束地址,VSA8-0和VEA8-0
      代表垂直方向的窗口起始和结束地址。要使用窗口功能需满足下式:
      “00”h ≤ HSA7-0< HEA7-0 ≤ “EF”h and HEA-HAS>=”04h”
      “00”h ≤ VSA8-0< VEA8-0 ≤ 9’h1AF
      对窗口访问功能定义如下图:
      d.png-36.1kB

实验代码

  1. #ifdef TIMER_C_
  2. #define TIMER_C_Extern
  3. #else
  4. #define TIMER_C_Extern extern
  5. #endif
  6. TIMER_C_Extern volatile uint8_t TimerCounter;
  7. TIMER_C_Extern volatile uint16_t gate;
  8. TIMER_C_Extern volatile uint8_t state;
  9. TIMER_C_Extern uint8_t timer[4];
  10. TIMER_C_Extern uint8_t bitA,Ans,levelNo[2];
  11. TIMER_C_Extern bool next_home,bitB[4],welcome_t;
  1. /*******************************************************************
  2. * 函数: TIMER0B_Handler()
  3. * 描述: 定时器中断函数扫描按键
  4. * 输入值:无
  5. * 返回值:无
  6. *****************************************************************/
  7. void TIMER0B_Handler(){
  8. TimerCounter++;
  9. if(TimerCounter%10 == 0){
  10. Button_run();
  11. }
  12. TimerIntClear(TIMER0_BASE, TIMER_TIMB_TIMEOUT);
  13. }
  1. /*******************************************************************
  2. * 函数: Button_run()
  3. * 描述: 按键扫描,执行相应函数
  4. * 输入值:无
  5. * 返回值:无
  6. *****************************************************************/
  7. void Button_run(){
  8. uint8_t Key = Button_Scan();
  9. switch(Key)
  10. {
  11. case J1: break;
  12. case J2: break;
  13. case J3: buzzer_run(500000);button3();break;
  14. case J4: break;
  15. case J5: buzzer_run(500000);button5();break;
  16. case J6: buzzer_run(500000);button6();break;
  17. case J7: buzzer_run(500000);button7();break;
  18. case J8: break;
  19. case J9: buzzer_run(500000);button9();break;
  20. case J10: buzzer_run(500000);button10();break;
  21. case J11: buzzer_run(500000);button11();break;
  22. case J12: break;
  23. case J13:buzzer_run(500000); button13();break;
  24. case J14: buzzer_run(500000);button14();break;
  25. case J15: buzzer_run(500000);button15();break;
  26. case J16: break;
  27. default: break;
  28. }
  29. }
  1. /*******************************************************************
  2. * 函数: button14()
  3. * 描述: 进入键,提交键
  4. * 输入值:无
  5. * 返回值:无
  6. *****************************************************************/
  7. void button14(){
  8. x=120,y=120,x44,y44,i;
  9. switch(state){
  10. case 0:{
  11. if(welcome_t==0){
  12. state=9;
  13. page_home();
  14. }
  15. else video_tutorial_Init();
  16. };break;
  17. case 1:{
  18. if(next_home==0){
  19. page_selectLevel();
  20. }
  21. else{
  22. video_tutorial();
  23. }
  24. };break;
  25. case 2:{
  26. if((bitA+binary_decimalism(bitB)==Ans)||(bitA-binary_decimalism(bitB)==Ans)){
  27. for(i=0;i<5;i=i+4){
  28. buzzer_change(15-i,1+i,40);
  29. }
  30. TFTLCD_showLed(x,y,RED,BLACK,8);
  31. Delay(10000);
  32. TFTLCD_showLed(x,y,CYAN,BLACK,8);
  33. Delay(10000);
  34. TFTLCD_showLed(x,y,RED,BLACK,8);
  35. Delay(10000);
  36. TFTLCD_showLed(x,y,CYAN,BLACK,8);
  37. Delay(10000);
  38. TFTLCD_showLed(x,y,RED,BLACK,8);
  39. TFTLCD_CLEAR(BLACK);
  40. TFTLCD_ShowString(50,220,"Congratulations!",WHITE,BLACK,400000);
  41. TFTLCD_ShowString(50,250,"now have fun",WHITE,BLACK,300000);
  42. Delay(8000000);
  43. page_selectLevel();
  44. }
  45. else{
  46. buzzer_change(1,15,40);
  47. Delay(50000);
  48. buzzer_change(1,15,40);
  49. TFTLCD_ShowString(50,220,"try again",WHITE,BLACK,300000);}
  50. };break;
  51. case 3:page_game();break;
  52. case 4:{
  53. x=120,y=120,x44=92,y44=260;
  54. int i;
  55. if((bitA+binary_decimalism(bitB)==Ans)||(bitA-binary_decimalism(bitB)==Ans)){
  56. for(i=0;i<5;i=i+4){
  57. buzzer_change(15-i,1+i,40);
  58. }
  59. TFTLCD_showLed(x,y,RED,BLACK,8);
  60. Delay(10000);
  61. TFTLCD_showLed(x,y,CYAN,BLACK,8);
  62. Delay(10000);
  63. TFTLCD_showLed(x,y,RED,BLACK,8);
  64. Delay(10000);
  65. TFTLCD_showLed(x,y,CYAN,BLACK,8);
  66. Delay(10000);
  67. TFTLCD_showLed(x,y,RED,BLACK,8);
  68. TFTLCD_ShowString(50,220,"Congratulations!",WHITE,BLACK,300000);
  69. Delay(3000000);
  70. TFTLCD_showButton(x44,y44,CYAN,BLACK,0);
  71. TFTLCD_ShowString(30,y44+80,"use this button to play",WHITE,BLACK,100000);
  72. TFTLCD_ShowString(30,y44+100,"same level another time",WHITE,BLACK,100000);
  73. for(i=0;i<3;i++){
  74. TFTLCD_showButton(x44,y44,RED,BLACK,16);
  75. Delay(10000);
  76. TFTLCD_showButton(x44,y44,CYAN,BLACK,16);
  77. Delay(10000);
  78. }
  79. TFTLCD_showButton(x44,y44,RED,BLACK,16);
  80. }};break;
  81. }
  82. }
  83. /*******************************************************************
  84. * 函数: button6()
  85. * 描述: 返回键
  86. * 输入值:无
  87. * 返回值:无
  88. *****************************************************************/
  89. void button6(){
  90. switch(state){
  91. case 1:break;
  92. case 2:page_home();break;
  93. case 3:page_home();break;
  94. case 4:ledclose();page_selectLevel();break;
  95. }
  96. }
  97. /*******************************************************************
  98. * 函数: button10()
  99. * 描述: 上
  100. * 输入值:无
  101. * 返回值:无
  102. *****************************************************************/
  103. void button10(){
  104. int x1=70,x2=170,y1=60,y2=160;
  105. switch(state){
  106. case 0:{
  107. if(welcome_t==0){
  108. TFTLCD_ShowString(92,120,"> yes <",WHITE,BLACK,10000);
  109. TFTLCD_ShowString(92,140,">not yet<",LBBLUE,BLACK,10000);
  110. welcome_t=1;Delay(3000);
  111. }
  112. else{
  113. TFTLCD_ShowString(92,120,"> yes <",LBBLUE,BLACK,10000);
  114. TFTLCD_ShowString(92,140,">not yet<",WHITE,BLACK,10000);
  115. welcome_t=0;Delay(3000);
  116. }
  117. };break;
  118. case 1:{
  119. if(next_home==0){
  120. TFTLCD_ShowString(60,250,"> Game Start <",WHITE,BLACK,1);
  121. next_home=1;
  122. TFTLCD_ShowString(68,290,"> Tutorial <",LBBLUE,BLACK,1);
  123. Delay(3000);
  124. }
  125. else {
  126. TFTLCD_ShowString(68,290,"> Tutorial <",WHITE,BLACK,1);
  127. next_home=0;
  128. TFTLCD_ShowString(60,250,"> Game Start <",LBBLUE,BLACK,1);
  129. Delay(3000);
  130. }
  131. };break;
  132. case 2:break;
  133. case 3:{
  134. if(levelNo[0]==0){
  135. TFTLCD_showLed(x1,y1,CYAN,BLACK,8);
  136. TFTLCD_showLed(x1,y2,CYAN,BLACK,8);
  137. TFTLCD_showLed(x2,y1,CYAN,BLACK,8);
  138. TFTLCD_showLed(x2,y2,CYAN,BLACK,8);
  139. levelNo[0]=1;
  140. }
  141. else{
  142. TFTLCD_showLed(x1,y1,CYAN,BLACK,8);
  143. TFTLCD_showLed(x1,y2,CYAN,BLACK,8);
  144. TFTLCD_showLed(x2,y1,CYAN,BLACK,8);
  145. TFTLCD_showLed(x2,y2,CYAN,BLACK,8);
  146. levelNo[0]=0;
  147. }
  148. };break;
  149. case 4:break;
  150. default:break;
  151. }
  152. }
  153. /*******************************************************************
  154. * 函数: button9()
  155. * 描述: 下
  156. * 输入值:无
  157. * 返回值:无
  158. *****************************************************************/
  159. void button9(){
  160. int x1=70,x2=170,y1=60,y2=160;
  161. switch(state){
  162. case 0:{
  163. if(welcome_t==0){
  164. TFTLCD_ShowString(92,120,"> yes <",WHITE,BLACK,1);
  165. TFTLCD_ShowString(92,140,">not yet<",LBBLUE,BLACK,1);
  166. welcome_t=1;Delay(3000);
  167. }
  168. else{
  169. TFTLCD_ShowString(92,120,"> yes <",LBBLUE,BLACK,1);
  170. TFTLCD_ShowString(92,140,">not yet<",WHITE,BLACK,1);
  171. welcome_t=0;Delay(3000);
  172. }
  173. };break;
  174. case 1:{
  175. if(next_home==0){
  176. TFTLCD_ShowString(60,250,"> Game Start <",WHITE,BLACK,1);
  177. next_home=1;
  178. TFTLCD_ShowString(68,290,"> Tutorial <",LBBLUE,BLACK,1);
  179. Delay(3000);
  180. }
  181. else {
  182. TFTLCD_ShowString(68,290,"> Tutorial <",WHITE,BLACK,1);
  183. next_home=0;
  184. TFTLCD_ShowString(60,250,"> Game Start <",LBBLUE,BLACK,1);
  185. Delay(3000);
  186. }
  187. };break;
  188. case 2:break;
  189. case 3:{
  190. if(levelNo[0]==1){
  191. TFTLCD_showLed(x1,y1,CYAN,BLACK,8);
  192. TFTLCD_showLed(x1,y2,CYAN,BLACK,8);
  193. TFTLCD_showLed(x2,y1,CYAN,BLACK,8);
  194. TFTLCD_showLed(x2,y2,CYAN,BLACK,8);
  195. levelNo[0]=0;
  196. }
  197. else {
  198. TFTLCD_showLed(x1,y1,CYAN,BLACK,8);
  199. TFTLCD_showLed(x1,y2,CYAN,BLACK,8);
  200. TFTLCD_showLed(x2,y1,CYAN,BLACK,8);
  201. TFTLCD_showLed(x2,y2,CYAN,BLACK,8);
  202. levelNo[0]=1;
  203. }
  204. };break;
  205. case 4:break;
  206. default:break;
  207. }
  208. }
  209. /*******************************************************************
  210. * 函数: button5()
  211. * 描述: 左
  212. * 输入值:无
  213. * 返回值:无
  214. *****************************************************************/
  215. void button5(){
  216. int x1=70,x2=170,y1=60,y2=160;
  217. switch(state){
  218. case 1:break;
  219. case 2:break;
  220. case 3:{
  221. if(levelNo[1]==1){
  222. TFTLCD_showLed(x1,y1,CYAN,BLACK,8);
  223. TFTLCD_showLed(x1,y2,CYAN,BLACK,8);
  224. TFTLCD_showLed(x2,y1,CYAN,BLACK,8);
  225. TFTLCD_showLed(x2,y2,CYAN,BLACK,8);
  226. levelNo[1]=0;
  227. }
  228. else {
  229. TFTLCD_showLed(x1,y1,CYAN,BLACK,8);
  230. TFTLCD_showLed(x1,y2,CYAN,BLACK,8);
  231. TFTLCD_showLed(x2,y1,CYAN,BLACK,8);
  232. TFTLCD_showLed(x2,y2,CYAN,BLACK,8);
  233. levelNo[1]=1;
  234. }};break;
  235. case 4:break;
  236. default:page_home();break;
  237. }
  238. }
  239. /*******************************************************************
  240. * 函数: button13()
  241. * 描述: 右
  242. * 输入值:无
  243. * 返回值:无
  244. *****************************************************************/
  245. void button13(){
  246. int x1=70,x2=170,y1=60,y2=160;
  247. switch(state){
  248. case 1:break;
  249. case 2:break;
  250. case 3:{
  251. if(levelNo[1]==1){
  252. TFTLCD_showLed(x1,y1,CYAN,BLACK,8);
  253. TFTLCD_showLed(x1,y2,CYAN,BLACK,8);
  254. TFTLCD_showLed(x2,y1,CYAN,BLACK,8);
  255. TFTLCD_showLed(x2,y2,CYAN,BLACK,8);
  256. levelNo[1]=0;
  257. }
  258. else {
  259. TFTLCD_showLed(x1,y1,CYAN,BLACK,8);
  260. TFTLCD_showLed(x1,y2,CYAN,BLACK,8);
  261. TFTLCD_showLed(x2,y1,CYAN,BLACK,8);
  262. TFTLCD_showLed(x2,y2,CYAN,BLACK,8);
  263. levelNo[1]=1;
  264. }};break;
  265. case 4:page_game();break;
  266. default:page_home();break;
  267. }
  268. }
  269. /*******************************************************************
  270. * 函数: button3()
  271. * 描述: 控制B最高位亮灭
  272. * 输入值:无
  273. * 返回值:无
  274. *****************************************************************/
  275. void button3(){
  276. if(state==4||state==2){
  277. if(bitB[0]==0){
  278. bitB[0]=1;
  279. LED_ON(7);
  280. }
  281. else {
  282. bitB[0]=0;
  283. LED_OFF(7);
  284. }
  285. }Delay(3000);
  286. }
  287. /*******************************************************************
  288. * 函数: button7()
  289. * 描述: 控制B第二位亮灭
  290. * 输入值:无
  291. * 返回值:无
  292. *****************************************************************/
  293. void button7(){
  294. if(state==4||state==2){
  295. if(bitB[1]==0){
  296. bitB[1]=1;
  297. LED_ON(6);
  298. }
  299. else {
  300. bitB[1]=0;
  301. LED_OFF(6);
  302. }
  303. }Delay(3000);
  304. }
  305. /*******************************************************************
  306. * 函数: button11()
  307. * 描述: 控制B第三位亮灭
  308. * 输入值:无
  309. * 返回值:无
  310. *****************************************************************/
  311. void button11(){
  312. if(state==4||state==2){
  313. if(bitB[2]==0){
  314. bitB[2]=1;
  315. LED_ON(5);
  316. }
  317. else {
  318. bitB[2]=0;
  319. LED_OFF(5);
  320. }
  321. }Delay(3000);
  322. }
  323. /*******************************************************************
  324. * 函数: button15()
  325. * 描述: 控制B最低位亮灭
  326. * 输入值:无
  327. * 返回值:无
  328. *****************************************************************/
  329. void button15(){
  330. if(state==4||state==2){
  331. if(bitB[3]==0){
  332. bitB[3]=1;
  333. LED_ON(4);
  334. }
  335. else {
  336. bitB[3]=0;
  337. LED_OFF(4);
  338. }
  339. }Delay(3000);
  340. }
  1. /*******************************************************************
  2. * 函数: TFTLCD_showLed(uint32_t x,uint32_t y,uint32_t fColor,uint32_t bColor,uint32_t mode)
  3. * 描述: 画一个fColor,背景色bColor,点(x,y)为圆心的30半径的圆,选择模式可以单独画一点,可以画全部点,也可以流水灯转。
  4. * 输入值:uint32_t x,uint32_t y,uint32_t fColor,uint32_t bColor,uint32_t mode
  5. * 返回值:无
  6. *****************************************************************/
  7. void TFTLCD_showLed(uint32_t x,uint32_t y,uint32_t fColor,uint32_t bColor,uint32_t mode){
  8. uint8_t a=7,r=30;
  9. switch(mode){
  10. case 0:TFTLCD_ShowString(x-4,y-r+8,"o",fColor,bColor,1);break;
  11. case 1:TFTLCD_ShowString(x+r/2+a-4,y-r/2-a+8,"o",fColor,bColor,1);break;
  12. case 2:TFTLCD_ShowString(x+r-4,y+8,"o",fColor,bColor,1);break;
  13. case 3:TFTLCD_ShowString(x+r/2+a-4,y+r/2+a+8,"o",fColor,bColor,1);break;
  14. case 4:TFTLCD_ShowString(x-4,y+r+8,"o",fColor,bColor,1);break;
  15. case 5:TFTLCD_ShowString(x-r/2-a-4,y+r/2+a+8,"o",fColor,bColor,1);break;
  16. case 6:TFTLCD_ShowString(x-r-4,y+8,"o",fColor,bColor,1);break;
  17. case 7:TFTLCD_ShowString(x-r/2-a-4,y-r/2-a+8,"o",fColor,bColor,1);break;
  18. case 8:{
  19. TFTLCD_ShowString(x-4,y-r+8,"o",fColor,bColor,1);
  20. TFTLCD_ShowString(x+r/2+a-4,y-r/2-a+8,"o",fColor,bColor,1);
  21. TFTLCD_ShowString(x+r-4,y+8,"o",fColor,bColor,1);
  22. TFTLCD_ShowString(x+r/2+a-4,y+r/2+a+8,"o",fColor,bColor,1);
  23. TFTLCD_ShowString(x-4,y+r+8,"o",fColor,bColor,1);
  24. TFTLCD_ShowString(x-r/2-a-4,y+r/2+a+8,"o",fColor,bColor,1);
  25. TFTLCD_ShowString(x-r-4,y+8,"o",fColor,bColor,1);
  26. TFTLCD_ShowString(x-r/2-a-4,y-r/2-a+8,"o",fColor,bColor,1);}break;
  27. case 9:{
  28. TFTLCD_ShowString(x-4,y-r+8,"o",fColor,bColor,1);SysCtlDelay(80000);
  29. TFTLCD_ShowString(x+r/2+a-4,y-r/2-a+8,"o",fColor,bColor,1);SysCtlDelay(80000);
  30. TFTLCD_ShowString(x+r-4,y+8,"o",fColor,bColor,1);SysCtlDelay(80000);
  31. TFTLCD_ShowString(x+r/2+a-4,y+r/2+a+8,"o",fColor,bColor,1);SysCtlDelay(80000);
  32. TFTLCD_ShowString(x-4,y+r+8,"o",fColor,bColor,1);SysCtlDelay(80000);
  33. TFTLCD_ShowString(x-r/2-a-4,y+r/2+a+8,"o",fColor,bColor,1);SysCtlDelay(80000);
  34. TFTLCD_ShowString(x-r-4,y+8,"o",fColor,bColor,1);SysCtlDelay(80000);
  35. TFTLCD_ShowString(x-r/2-a-4,y-r/2-a+8,"o",fColor,bColor,1);SysCtlDelay(80000);
  36. Button_run();}break;
  37. default:break;
  38. }
  39. }
  40. /*******************************************************************
  41. * 函数: TFTLCD_showButton(uint32_t x,uint32_t y,uint32_t fColor,uint32_t bColor,uint32_t moded)
  42. * 描述: 画一个fColor,底色bColor的(x,y)为起点的4x4个圆圈构成的方形,可以选择模式单独绘制一个点或绘制全部点。
  43. * 输入值:uint32_t x,uint32_t y,uint32_t fColor,uint32_t bColor,uint32_t moded
  44. * 返回值:无
  45. *****************************************************************/
  46. void TFTLCD_showButton(uint32_t x,uint32_t y,uint32_t fColor,uint32_t bColor,uint32_t moded){
  47. int a=16;
  48. switch(moded){
  49. case 0:{
  50. TFTLCD_ShowString(x,y,"o",fColor,bColor,1);
  51. TFTLCD_ShowString(x+a,y,"o",fColor,bColor,1);
  52. TFTLCD_ShowString(x+2*a,y,"o",fColor,bColor,1);
  53. TFTLCD_ShowString(x+3*a,y,"o",fColor,bColor,1);
  54. TFTLCD_ShowString(x,y+a,"o",fColor,bColor,1);
  55. TFTLCD_ShowString(x+a,y+a,"o",fColor,bColor,1);
  56. TFTLCD_ShowString(x+2*a,y+a,"o",fColor,bColor,1);
  57. TFTLCD_ShowString(x+3*a,y+a,"o",fColor,bColor,1);
  58. TFTLCD_ShowString(x,y+2*a,"o",fColor,bColor,1);
  59. TFTLCD_ShowString(x+a,y+2*a,"o",fColor,bColor,1);
  60. TFTLCD_ShowString(x+2*a,y+2*a,"o",fColor,bColor,1);
  61. TFTLCD_ShowString(x+3*a,y+2*a,"o",fColor,bColor,1);
  62. TFTLCD_ShowString(x,y+3*a,"o",fColor,bColor,1);
  63. TFTLCD_ShowString(x+a,y+3*a,"o",fColor,bColor,1);
  64. TFTLCD_ShowString(x+2*a,y+3*a,"o",fColor,bColor,1);
  65. TFTLCD_ShowString(x+3*a,y+3*a,"o",fColor,bColor,1);
  66. };break;
  67. case 1:TFTLCD_ShowString(x,y,"o",fColor,bColor,1);break;
  68. case 2:TFTLCD_ShowString(x+a,y,"o",fColor,bColor,1);break;
  69. case 3:TFTLCD_ShowString(x+2*a,y,"o",fColor,bColor,1);break;
  70. case 4:TFTLCD_ShowString(x+3*a,y,"o",fColor,bColor,1);break;
  71. case 5:TFTLCD_ShowString(x,y+a,"o",fColor,bColor,1);break;
  72. case 6:TFTLCD_ShowString(x+a,y+a,"o",fColor,bColor,1);break;
  73. case 7:TFTLCD_ShowString(x+2*a,y+a,"o",fColor,bColor,1);break;
  74. case 8:TFTLCD_ShowString(x+3*a,y+a,"o",fColor,bColor,1);break;
  75. case 9:TFTLCD_ShowString(x,y+2*a,"o",fColor,bColor,1);break;
  76. case 10:TFTLCD_ShowString(x+a,y+2*a,"o",fColor,bColor,1);break;
  77. case 11:TFTLCD_ShowString(x+2*a,y+2*a,"o",fColor,bColor,1);break;
  78. case 12:TFTLCD_ShowString(x+3*a,y+2*a,"o",fColor,bColor,1);break;
  79. case 13:TFTLCD_ShowString(x,y+3*a,"o",fColor,bColor,1);break;
  80. case 14:TFTLCD_ShowString(x+a,y+3*a,"o",fColor,bColor,1);break;
  81. case 15:TFTLCD_ShowString(x+2*a,y+3*a,"o",fColor,bColor,1);break;
  82. case 16:TFTLCD_ShowString(x+3*a,y+3*a,"o",fColor,bColor,1);break;
  83. }
  84. }
  1. /*******************************************************************
  2. * 函数: page_home()
  3. * 描述: 主页面
  4. * 输入值:无
  5. * 返回值:无
  6. *****************************************************************/
  7. void page_home(){
  8. state=1;next_home=0;
  9. TFTLCD_CLEAR(BLACK);
  10. int x=120,y=120,flag=0;
  11. TFTLCD_showLed(x,y,CYAN,BLACK,9);
  12. TFTLCD_showLed(x,y,RED,BLACK,9);
  13. TFTLCD_ShowString(60,200,"Binary Bit Trace",WHITE,BLACK,10000);
  14. TFTLCD_ShowString(60,250,"> Game Start <",LBBLUE,BLACK,1);
  15. TFTLCD_ShowString(68,290,"> Tutorial <",WHITE,BLACK,1);
  16. while(state==1){
  17. if(flag==0){
  18. TFTLCD_showLed(x,y,CYAN,BLACK,9);
  19. flag=1;
  20. }
  21. else {
  22. TFTLCD_showLed(x,y,RED,BLACK,9);
  23. flag=0;
  24. }
  25. }
  26. }
  27. /*******************************************************************
  28. * 函数: page_selectLevel()
  29. * 描述: 选关页面
  30. * 输入值:无
  31. * 返回值:无
  32. *****************************************************************/
  33. void page_selectLevel(){
  34. state=3;
  35. levelNo[0]=0;levelNo[1]=0;
  36. int x1=70,x2=170,y1=60,y2=160,flag=0;//x44=92,y44=240;
  37. TFTLCD_CLEAR(BLACK);
  38. TFTLCD_showLed(x1,y1,CYAN,BLACK,8);
  39. TFTLCD_showLed(x1,y2,CYAN,BLACK,8);
  40. TFTLCD_showLed(x2,y1,CYAN,BLACK,8);
  41. TFTLCD_showLed(x2,y2,CYAN,BLACK,8);
  42. TFTLCD_ShowString(x1-4,y1+8,"1",CYAN,BLACK,1);
  43. TFTLCD_ShowString(x2-4,y1+8,"2",CYAN,BLACK,1);
  44. TFTLCD_ShowString(x1-4,y2+8,"3",CYAN,BLACK,1);
  45. TFTLCD_ShowString(x2-4,y2+8,"4",CYAN,BLACK,1);
  46. TFTLCD_ShowString(x1-20,y2-40,"> Select Level <",CYAN,BLACK,1);
  47. //TFTLCD_showButton(x44,y44,CYAN,BLACK,0);
  48. while(state==3){
  49. if(flag==0){
  50. switch(2*levelNo[0]+levelNo[1]+1){
  51. case 1:TFTLCD_showLed(x1,y1,RED,BLACK,9);break;
  52. case 2:TFTLCD_showLed(x2,y1,RED,BLACK,9);break;
  53. case 3:TFTLCD_showLed(x1,y2,RED,BLACK,9);break;
  54. case 4:TFTLCD_showLed(x2,y2,RED,BLACK,9);break;
  55. }
  56. flag=1; }
  57. else{
  58. switch(2*levelNo[0]+levelNo[1]+1){
  59. case 1:TFTLCD_showLed(x1,y1,CYAN,BLACK,9);break;
  60. case 2:TFTLCD_showLed(x2,y1,CYAN,BLACK,9);break;
  61. case 3:TFTLCD_showLed(x1,y2,CYAN,BLACK,9);break;
  62. case 4:TFTLCD_showLed(x2,y2,CYAN,BLACK,9);break;
  63. }
  64. flag=0; }
  65. }
  66. }
  67. /*******************************************************************
  68. * 函数: page_game()
  69. * 描述: 游戏页面
  70. * 输入值:无
  71. * 返回值:无
  72. *****************************************************************/
  73. void page_game(){
  74. state=4;
  75. ledclose();
  76. bitA=rand16();
  77. led_A16(bitA);
  78. bitB[0]=0;bitB[1]=0;bitB[2]=0;bitB[3]=0;
  79. int x=120,y=120;//x44=92,y44=260;
  80. TFTLCD_CLEAR(BLACK);
  81. TFTLCD_ShowString(50,80,"the Expected Result",WHITE,BLACK,1);
  82. TFTLCD_showLed(x,y,CYAN,BLACK,0);TFTLCD_showLed(x,y,CYAN,BLACK,1);
  83. TFTLCD_showLed(x,y,CYAN,BLACK,2);TFTLCD_showLed(x,y,CYAN,BLACK,3);
  84. TFTLCD_showLed(x,y,LBBLUE,BLACK,4);TFTLCD_showLed(x,y,LBBLUE,BLACK,5);
  85. TFTLCD_showLed(x,y,LBBLUE,BLACK,6);TFTLCD_showLed(x,y,LBBLUE,BLACK,7);
  86. switch(2*levelNo[0]+levelNo[1]){
  87. case 0:{
  88. Ans=0;
  89. TFTLCD_ShowString(x-4,y+8,"1",CYAN,BLACK,1);
  90. };break;
  91. case 1:{
  92. Ans=15;
  93. drawled_Ans(Ans);
  94. TFTLCD_ShowString(x-4,y+8,"2",CYAN,BLACK,1);
  95. };break;
  96. case 2:{
  97. Ans=7;
  98. drawled_Ans(Ans);
  99. TFTLCD_ShowString(x-4,y+8,"3",CYAN,BLACK,1);
  100. };break;
  101. case 3:{
  102. Ans=rand16();
  103. drawled_Ans(Ans);
  104. TFTLCD_ShowString(x-4,y+8,"4",CYAN,BLACK,1);
  105. };break;}
  106. }
  107. /*******************************************************************
  108. * 函数: video_tutorial()
  109. * 描述: 游戏教程
  110. * 输入值:无
  111. * 返回值:无
  112. *****************************************************************/
  113. void video_tutorial(){
  114. TFTLCD_CLEAR(BLACK);
  115. ledclose();
  116. state=2;Ans=9;bitA=8;
  117. int x=120,y=120,x44=92,y44=260,i;
  118. TFTLCD_ShowString(50,30,"Tutorial",WHITE,BLACK,100000);
  119. TFTLCD_ShowString(50,70,"This is your LED",WHITE,BLACK,100000);
  120. Delay(500000000);
  121. TFTLCD_showLed(x,y,CYAN,BLACK,0);TFTLCD_showLed(x,y,CYAN,BLACK,1);
  122. TFTLCD_showLed(x,y,CYAN,BLACK,2);TFTLCD_showLed(x,y,CYAN,BLACK,3);
  123. TFTLCD_showLed(x,y,LBBLUE,BLACK,4);TFTLCD_showLed(x,y,LBBLUE,BLACK,5);
  124. TFTLCD_showLed(x,y,LBBLUE,BLACK,6);TFTLCD_showLed(x,y,LBBLUE,BLACK,7);
  125. Delay(500000000);
  126. TFTLCD_ShowString(50,70,"This is your LED",BLACK,BLACK,100000);
  127. TFTLCD_ShowString(50,70,"a 4bit number A",WHITE,BLACK,1);
  128. for(i=0;i<4;i++){
  129. TFTLCD_showLed(x,y,CYAN,BLACK,0);TFTLCD_showLed(x,y,CYAN,BLACK,1);
  130. TFTLCD_showLed(x,y,CYAN,BLACK,2);TFTLCD_showLed(x,y,CYAN,BLACK,3);
  131. Delay(5000000);
  132. TFTLCD_showLed(x,y,RED,BLACK,0);TFTLCD_showLed(x,y,RED,BLACK,1);
  133. TFTLCD_showLed(x,y,RED,BLACK,2);TFTLCD_showLed(x,y,RED,BLACK,3);
  134. Delay(5000000);
  135. }
  136. TFTLCD_showLed(x,y,CYAN,BLACK,0);TFTLCD_showLed(x,y,CYAN,BLACK,1);
  137. TFTLCD_showLed(x,y,CYAN,BLACK,2);TFTLCD_showLed(x,y,CYAN,BLACK,3);
  138. TFTLCD_ShowString(50,70,"a 4bit number B",WHITE,BLACK,1);
  139. for(i=0;i<4;i++){
  140. TFTLCD_showLed(x,y,LBBLUE,BLACK,4);TFTLCD_showLed(x,y,LBBLUE,BLACK,5);
  141. TFTLCD_showLed(x,y,LBBLUE,BLACK,6);TFTLCD_showLed(x,y,LBBLUE,BLACK,7);
  142. Delay(5000000);
  143. TFTLCD_showLed(x,y,RED,BLACK,4);TFTLCD_showLed(x,y,RED,BLACK,5);
  144. TFTLCD_showLed(x,y,RED,BLACK,6);TFTLCD_showLed(x,y,RED,BLACK,7);
  145. Delay(5000000);
  146. }
  147. TFTLCD_showLed(x,y,LBBLUE,BLACK,4);TFTLCD_showLed(x,y,LBBLUE,BLACK,5);
  148. TFTLCD_showLed(x,y,LBBLUE,BLACK,6);TFTLCD_showLed(x,y,LBBLUE,BLACK,7);
  149. TFTLCD_ShowString(x44-30,y44+100,"and 4x4 button",WHITE,BLACK,1);
  150. TFTLCD_showButton(x44,y44,CYAN,BLACK,0);
  151. Delay(500000000);
  152. TFTLCD_ShowString(x44-60,y44-40,"numberB is related to",WHITE,BLACK,1);
  153. TFTLCD_ShowString(x44-30,y44-20,"these buttons",WHITE,BLACK,1);
  154. for(i=0;i<4;i++){
  155. TFTLCD_showLed(x,y,LBBLUE,BLACK,4);TFTLCD_showLed(x,y,LBBLUE,BLACK,5);
  156. TFTLCD_showLed(x,y,LBBLUE,BLACK,6);TFTLCD_showLed(x,y,LBBLUE,BLACK,7);
  157. TFTLCD_showButton(x44,y44,CYAN,BLACK,5);TFTLCD_showButton(x44,y44,CYAN,BLACK,6);
  158. TFTLCD_showButton(x44,y44,CYAN,BLACK,7);TFTLCD_showButton(x44,y44,CYAN,BLACK,8);
  159. Delay(5000000);
  160. TFTLCD_showLed(x,y,RED,BLACK,4);TFTLCD_showLed(x,y,RED,BLACK,5);
  161. TFTLCD_showLed(x,y,RED,BLACK,6);TFTLCD_showLed(x,y,RED,BLACK,7);
  162. TFTLCD_showButton(x44,y44,RED,BLACK,5);TFTLCD_showButton(x44,y44,RED,BLACK,6);
  163. TFTLCD_showButton(x44,y44,RED,BLACK,7);TFTLCD_showButton(x44,y44,RED,BLACK,8);
  164. Delay(5000000);
  165. }
  166. TFTLCD_FillBlock(0,240,y44-60,y44-20,BLACK);
  167. TFTLCD_ShowString(50,70,"the Ans we need",WHITE,BLACK,200000);
  168. TFTLCD_showLed(x,y,RED,BLACK,0);TFTLCD_showLed(x,y,CYAN,BLACK,1);
  169. TFTLCD_showLed(x,y,CYAN,BLACK,2);TFTLCD_showLed(x,y,RED,BLACK,3);
  170. TFTLCD_showLed(x,y,LBBLUE,BLACK,4);TFTLCD_showLed(x,y,LBBLUE,BLACK,5);
  171. TFTLCD_showLed(x,y,LBBLUE,BLACK,6);TFTLCD_showLed(x,y,LBBLUE,BLACK,7);
  172. TFTLCD_ShowString(50,200,"is now here above",WHITE,BLACK,20000);
  173. LED_ON(0);
  174. TFTLCD_ShowString(50,240," make A+/-B=Ans",WHITE,BLACK,20000);
  175. TFTLCD_showButton(x44,y44,GREEN,BLACK,12);
  176. TFTLCD_ShowString(30,y44+100,"submit with the GREEN",WHITE,BLACK,20000);
  177. }
  178. /*******************************************************************
  179. * 函数: video_tutorial_Init()
  180. * 描述: 开机教程
  181. * 输入值:无
  182. * 返回值:无
  183. *****************************************************************/
  184. void video_tutorial_Init(){
  185. state=0;welcome_t=0;
  186. int x44=92,y44=160,a=16,i;
  187. TFTLCD_CLEAR(BLACK);
  188. TFTLCD_ShowString(50,80,"a Welcome Tutorial",WHITE,BLACK,200000);
  189. TFTLCD_showButton(x44,y44,CYAN,BLACK,0);
  190. Delay(500000000);
  191. TFTLCD_ShowString(x44,y44-40,"This is your",WHITE,BLACK,200000);
  192. TFTLCD_ShowString(x44,y44-20,"4x4 button",WHITE,BLACK,200000);
  193. Delay(500000000);
  194. TFTLCD_ShowString(x44,y44+3*a+20,"up down",WHITE,BLACK,1);
  195. TFTLCD_ShowString(x44,y44+3*a+38,"left right",WHITE,BLACK,1);
  196. Delay(500000000);
  197. for(i=0;i<5;i++){
  198. TFTLCD_showButton(x44,y44,RED,BLACK,11);
  199. TFTLCD_showButton(x44,y44,RED,BLACK,14);
  200. TFTLCD_showButton(x44,y44,RED,BLACK,15);
  201. TFTLCD_showButton(x44,y44,RED,BLACK,16);
  202. Delay(10000);
  203. TFTLCD_showButton(x44,y44,CYAN,BLACK,11);
  204. TFTLCD_showButton(x44,y44,CYAN,BLACK,14);
  205. TFTLCD_showButton(x44,y44,CYAN,BLACK,15);
  206. TFTLCD_showButton(x44,y44,CYAN,BLACK,16);
  207. Delay(10000);
  208. }
  209. TFTLCD_showButton(x44,y44,LBBLUE,BLACK,11);
  210. TFTLCD_showButton(x44,y44,LBBLUE,BLACK,14);
  211. TFTLCD_showButton(x44,y44,LBBLUE,BLACK,15);
  212. TFTLCD_showButton(x44,y44,LBBLUE,BLACK,16);
  213. Delay(5000000);
  214. TFTLCD_ShowString(x44+60,y44+2*a,"Enter",WHITE,BLACK,1);
  215. for(i=0;i<5;i++){
  216. TFTLCD_showButton(x44,y44,RED,BLACK,12);
  217. Delay(10000);
  218. TFTLCD_showButton(x44,y44,CYAN,BLACK,12);
  219. Delay(10000);
  220. }
  221. TFTLCD_showButton(x44,y44,RED,BLACK,12);
  222. Delay(5000000);
  223. TFTLCD_ShowString(x44+60,y44+3*a,"go Back",WHITE,BLACK,1);
  224. for(i=0;i<5;i++){
  225. TFTLCD_showButton(x44,y44,RED,BLACK,10);
  226. Delay(10000);
  227. TFTLCD_showButton(x44,y44,CYAN,BLACK,10);
  228. Delay(10000);
  229. }
  230. TFTLCD_showButton(x44,y44,RED,BLACK,10);
  231. Delay(5000000);
  232. TFTLCD_CLEAR(BLACK);
  233. TFTLCD_ShowString(40,80,"Now,",WHITE,BLACK,500000);
  234. TFTLCD_ShowString(72,80,"do you understand?",WHITE,BLACK,100000);
  235. TFTLCD_ShowString(92,120,"> yes <",LBBLUE,BLACK,1);
  236. TFTLCD_ShowString(92,140,">not yet<",WHITE,BLACK,1);
  237. while(state==0){
  238. Button_run();
  239. Delay(5000000);
  240. }
  241. }
  242. /*******************************************************************
  243. * 函数: drawled_Ans(uint8_t An)
  244. * 描述: 输入10进制结果绘制LCD屏上的小灯
  245. * 输入值:uint8_t An
  246. * 返回值:无
  247. *****************************************************************/
  248. void drawled_Ans(uint8_t An){
  249. int x=120,y=120;
  250. switch(An){
  251. case 0:break;
  252. case 1:TFTLCD_showLed(x,y,RED,BLACK,3);break;
  253. case 2:TFTLCD_showLed(x,y,RED,BLACK,2);break;
  254. case 3:TFTLCD_showLed(x,y,RED,BLACK,2);TFTLCD_showLed(x,y,RED,BLACK,3);break;
  255. case 4:TFTLCD_showLed(x,y,RED,BLACK,1);break;
  256. case 5:TFTLCD_showLed(x,y,RED,BLACK,1);TFTLCD_showLed(x,y,RED,BLACK,3);break;
  257. case 6:TFTLCD_showLed(x,y,RED,BLACK,1);TFTLCD_showLed(x,y,RED,BLACK,2);break;
  258. case 7:TFTLCD_showLed(x,y,RED,BLACK,1);TFTLCD_showLed(x,y,RED,BLACK,2);
  259. TFTLCD_showLed(x,y,RED,BLACK,2);break;
  260. case 8:TFTLCD_showLed(x,y,RED,BLACK,0);break;
  261. case 9:TFTLCD_showLed(x,y,RED,BLACK,0);TFTLCD_showLed(x,y,RED,BLACK,3);break;
  262. case 10:TFTLCD_showLed(x,y,RED,BLACK,0);TFTLCD_showLed(x,y,RED,BLACK,2);break;
  263. case 11:TFTLCD_showLed(x,y,RED,BLACK,0);TFTLCD_showLed(x,y,RED,BLACK,2);
  264. TFTLCD_showLed(x,y,RED,BLACK,3);break;
  265. case 12:TFTLCD_showLed(x,y,RED,BLACK,0);TFTLCD_showLed(x,y,RED,BLACK,1);break;
  266. case 13:TFTLCD_showLed(x,y,RED,BLACK,0);TFTLCD_showLed(x,y,RED,BLACK,1);
  267. TFTLCD_showLed(x,y,RED,BLACK,3);break;
  268. case 14:TFTLCD_showLed(x,y,RED,BLACK,0);TFTLCD_showLed(x,y,RED,BLACK,1);
  269. TFTLCD_showLed(x,y,RED,BLACK,2);break;
  270. case 15:TFTLCD_showLed(x,y,RED,BLACK,0);TFTLCD_showLed(x,y,RED,BLACK,1);
  271. TFTLCD_showLed(x,y,RED,BLACK,2);TFTLCD_showLed(x,y,RED,BLACK,3);break;
  272. }
  273. }
  1. /*******************************************************************
  2. * 函数: buzzer_run(uint32_t frequency)
  3. * 描述: 占空比0.5的固定叫声,frequency是二分之一周期
  4. * 输入值:uint32_t frequency
  5. * 返回值:无
  6. *****************************************************************/
  7. void buzzer_run(uint32_t frequency){
  8. GPIOPinWrite(GPIOM,GPIO_PIN_5,GPIO_PIN_5);
  9. Delay(frequency);
  10. GPIOPinWrite(GPIOM,GPIO_PIN_5,0x00);
  11. Delay(frequency);
  12. }
  13. /*******************************************************************
  14. * 函数: buzzer_change(uint32_t freq1,uint32_t freq2,uint32_t length)
  15. * 描述: 改变蜂鸣器占空比,并确定它响多久
  16. * 输入值:uint32_t freq1,uint32_t freq2,uint32_t length
  17. * 返回值:无
  18. *****************************************************************/
  19. void buzzer_change(uint32_t freq1,uint32_t freq2,uint32_t length){
  20. int i;
  21. for(i=0;i<length;i++){
  22. GPIOPinWrite(GPIOM,GPIO_PIN_5,GPIO_PIN_5);
  23. Delay(freq1);
  24. GPIOPinWrite(GPIOM,GPIO_PIN_5,0x00);
  25. Delay(freq2);
  26. }
  27. }
  28. /*******************************************************************
  29. * 函数: LED_ON(uint8_t NumLED)
  30. * 描述: 点亮某一盏LED
  31. * 输入值:uint8_t NumLED
  32. * 返回值:无
  33. *****************************************************************/
  34. void LED_ON(uint8_t NumLED){
  35. switch(NumLED)
  36. {
  37. case 0: GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_PIN_1); break;
  38. case 1: GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,GPIO_PIN_2); break;
  39. case 2: GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3); break;
  40. case 3: GPIOPinWrite(GPIO_PORTL_BASE,GPIO_PIN_0,GPIO_PIN_0); break;
  41. case 4: GPIOPinWrite(GPIO_PORTL_BASE,GPIO_PIN_1,GPIO_PIN_1); break;
  42. case 5: GPIOPinWrite(GPIO_PORTL_BASE,GPIO_PIN_2,GPIO_PIN_2); break;
  43. case 6: GPIOPinWrite(GPIO_PORTL_BASE,GPIO_PIN_3,GPIO_PIN_3); break;
  44. case 7: GPIOPinWrite(GPIO_PORTL_BASE,GPIO_PIN_4,GPIO_PIN_4); break;
  45. default: ledclose(); break;
  46. }
  47. }
  48. /*******************************************************************
  49. * 函数: led_A16(uint8_t A)
  50. * 描述: 输入10进制结果点亮LED
  51. * 输入值:uint8_t A
  52. * 返回值:无
  53. *****************************************************************/
  54. void led_A16(uint8_t A){
  55. switch(A){
  56. case 0:break;
  57. case 1:LED_ON(3);break;
  58. case 2:LED_ON(2);break;
  59. case 3:LED_ON(2);LED_ON(3);break;
  60. case 4:LED_ON(1);break;
  61. case 5:LED_ON(1);LED_ON(3);break;
  62. case 6:LED_ON(1);LED_ON(2);break;
  63. case 7:LED_ON(1);LED_ON(2);LED_ON(3);break;
  64. case 8:LED_ON(0);break;
  65. case 9:LED_ON(0);LED_ON(3);break;
  66. case 10:LED_ON(0);LED_ON(2);break;
  67. case 11:LED_ON(0);LED_ON(2);LED_ON(3);break;
  68. case 12:LED_ON(0);LED_ON(1);break;
  69. case 13:LED_ON(0);LED_ON(1);LED_ON(3);break;
  70. case 14:LED_ON(0);LED_ON(1);LED_ON(2);break;
  71. case 15:LED_ON(0);LED_ON(1);LED_ON(2);LED_ON(3);break;
  72. }
  73. }

遇到的问题和解决方式

  1. #ifdef TIMER_C_
  2. #define TIMER_C_Extern
  3. #else
  4. #define TIMER_C_Extern extern
  5. #endif
  6. TIMER_C_Extern bool testing;

遗留bug

如果有未来版本

历史版本

实验总结

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注