メディア

「MAX 10 NEEK」でストップウォッチを開発し、内蔵メモリから起動する(ソースコード)(4/4 ページ)

» 2016年09月09日 10時00分 公開
[PR/MONOist]
前のページへ 1|2|3|4       
PR

List 4

  1. List 4:
  2. #include <stdio.h>
  3. #include "system.h"
  4. #include "altera_avalon_pio_regs.h"
  5. #include "sys/alt_alarm.h"
  6. #include "alt_types.h"
  7. long Ticks, Num;
  8. long HEXtable[10] = {0x40, // 0:1000000
  9. 0x79, // 1:1111001
  10. 0x24, // 2:0100100
  11. 0x30, // 3:0110000
  12. 0x19, // 4:0011001
  13. 0x12, // 5:0010010
  14. 0x02, // 6:0000010
  15. 0x78, // 7:1111000
  16. 0x00, // 8:0000000
  17. 0x10 // 9:0010000
  18. };
  19. #define KEY_START 0x01
  20. #define KEY_HOLD 0x02
  21. #define KEY_STOP 0x04
  22. #define KEY_RESET 0x08
  23. void LEDR_out(int num)
  24. {
  25. if((num < 0)||(num > 9)) return;
  26. IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE, 1 << num);
  27. }
  28. void HEX_out(int digit, int num)
  29. {
  30. if((num < 0)||(num > 9)) return;
  31. if((digit < 0)||(digit > 2)) return;
  32. if(digit)
  33. IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE, HEXtable[num]);
  34. else
  35. IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE, HEXtable[num]);
  36. }
  37. alt_u32 Alarm_Int(void* context)
  38. {
  39. Ticks++;
  40. if (Ticks >= 100)
  41. {
  42. Num++;
  43. if (Num > 999) Num = 0;
  44. LEDR_out(Num%10);
  45. HEX_out(0, (Num/10)%10);
  46. HEX_out(1, Num/100);
  47. Ticks=0;
  48. }
  49. return 1;
  50. }
  51. int main()
  52. {
  53. static alt_alarm Alarm;
  54. alt_u8 KeyStatus, FLAG=0; // 0:Stop 1:Running
  55. // Initial Display
  56. LEDR_out(0);
  57. HEX_out(0, 0);
  58. HEX_out(1, 0);
  59. while(1)
  60. {
  61. KeyStatus = IORD_ALTERA_AVALON_PIO_DATA(KEY_BASE);
  62. if(( KeyStatus & KEY_START ) == 0 )
  63. {
  64. if ( FLAG != 1 )
  65. {
  66. alt_alarm_start(&Alarm,
  67. 1,
  68. Alarm_Int,
  69. NULL);
  70. }
  71. FLAG = 1;
  72. }
  73. else if (( KeyStatus & KEY_HOLD ) == 0 )
  74. {
  75. if( FLAG )
  76. {
  77. alt_alarm_stop(&Alarm);
  78. FLAG = 0;
  79. }
  80. else
  81. {
  82. alt_alarm_start(&Alarm,
  83. 1,
  84. Alarm_Int,
  85. NULL);
  86. FLAG = 1;
  87. }
  88. }
  89. else if (( KeyStatus & KEY_STOP ) == 0 )
  90. {
  91. alt_alarm_stop(&Alarm);
  92. FLAG = 0;
  93. }
  94. else if (( KeyStatus & KEY_RESET ) == 0 )
  95. {
  96. Ticks = 0;
  97. Num = 0;
  98. LEDR_out(0);
  99. HEX_out(0, 0);
  100. HEX_out(1, 0);
  101. }
  102. }
  103. return 0;
  104. }
List4


前のページへ 1|2|3|4       

提供:日本アルテラ株式会社
アイティメディア営業企画/制作:MONOist 編集部/掲載内容有効期限:2016年10月10日

Copyright © ITmedia, Inc. All Rights Reserved.