Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.18 KB | None | 0 0
  1. #include<msp430x14x.h>
  2.  
  3.  
  4.  
  5.  
  6. #define bitset(var,bitno) ((var) |= 1 << (bitno))
  7. #define bitclr(var,bitno) ((var) &= ~(1 << (bitno)))
  8.  
  9.  
  10.  
  11.  
  12.  
  13. #define LCD_Data P2OUT
  14. #define _100us 100 //
  15. #define _10us 10 //
  16. #define E 3 //P2.3
  17. #define RS 2 //P2.2
  18.  
  19. #define CLR_DISP 0x01 // clear display
  20. #define CUR_HOME 0x02 // return home
  21. #define ENTRY_INC 0x06 // entry mode increment
  22. #define ENTRY_INC_ROL 0x07 // entry mode increment with rol data
  23. #define ENTRY_DEC 0x04 // entry mode decrement
  24. #define ENTRY_DEC_ROL 0x05 // entry mode decrement witch rol dat
  25. #define DISP_OFF 0x08 // all display off
  26. #define DISP_ON 0x0c // all display on
  27.  
  28. #define DATA_ROL_LEFT 0x18 // rol data left
  29. #define DATA_ROL_RIGHT 0x1c // rol data right
  30. #define CUR_SHIFT_LEFT 0x10 // shift coursor left
  31. #define CUR_SHIFT_RIGHT 0x14 // shift coursor right
  32.  
  33. #define DD_RAM_ADDR 0x80 // set DD_RAM
  34. #define DD_RAM_ADDR2 0xc0 // set CG_RAM
  35. #define DD_RAM_ADDR3 0x28 //
  36. #define STATUS_ON P2OUT&=~BIT1
  37. #define STATUS_OFF P2OUT|=BIT1
  38. #define BUZ1_HI P4OUT|=BIT2
  39. #define BUZ1_LOW P4OUT&=~BIT2
  40. #define BUZ2_HI P4OUT|=BIT3
  41. #define BUZ2_LOW P4OUT&=~BIT3
  42. #define FREQ_BUZ 100
  43. #define LIGHT 32000
  44. #define BUZZER 900
  45. #define CG_RAM_ADDR 0x40 //
  46.  
  47. void InitPortsLcd(void);
  48. void InitLCD(void);
  49. void putc(char c);
  50. void clearDisplay();
  51. void printDecDigit(int Number);
  52. void SEND_CHAR (unsigned char c);
  53. void SEND_CMD (unsigned char e);
  54. void Delayx100us(unsigned char b);
  55. void InitPortsLcd(void);
  56. void Delay (unsigned int a);
  57. void _E(void);
  58. void przelicznik(long x);
  59. void delay (unsigned int n);
  60. void Game();
  61. void Wyswietl();
  62. void Wczytywanie_znakow();
  63.  
  64. //---------------- zmienne globalne -------------
  65. unsigned int i=0;
  66. unsigned int licznik=0;
  67. unsigned int kierunek = 0; // 0 - stop, 1 - lewo, 2 - prawo, 3 - gora, 4 - dol
  68. unsigned int dlugosc = 2; // dlugosc pytona
  69. //----------------- main program -------------------
  70. void main( void )
  71. {
  72.  
  73. P4DIR &= ~0x10;
  74. P4DIR &= ~0x20;
  75. P4DIR &= ~0x40;
  76. P4DIR &= ~0x80;
  77. P2DIR |= BIT1 ; // STATUS LED
  78. P2DIR |= 0x02; // ustawienie P2.1 jako wyjocie
  79. P4DIR |= BIT2 | BIT3; // P4.2 i P4.3 wyjocia
  80. BUZ1_LOW;
  81. BUZ2_LOW;
  82.  
  83. //WDT wylaczony
  84. WDTCTL=WDTPW + WDTHOLD;
  85. IE1 |= WDTIE;
  86. _BIS_SR(GIE);
  87.  
  88. InitPortsLcd(); // inicjalizacja portów LCD
  89. InitLCD(); // inicjalizacja LCD
  90. clearDisplay(); // czyszczenie wyowietlacza
  91.  
  92. // Basic Clock Module ustawiamy na ACLK(zegar 8 MHz ) i dzielimy czestotliwooa przez 2 (4 MHz)
  93. BCSCTL1 |= XTS ;//+ DIVA_3; // ACLK = LFXT1 = HF XTAL 8MHz !!!!zad1 ma byc DIVA3!!!!
  94.  
  95. do{
  96. IFG1 &= ~OFIFG; // Czyszczenie flgi OSCFault
  97. for (i = 0xFF; i > 0; i--); // odczekanie
  98. }while ((IFG1 & OFIFG) == OFIFG); // dopóki OSCFault jest ci1gle ustawiona
  99.  
  100. BCSCTL1 |= DIVA_1;//DIVA_2; // ACLK=8 MHz/2=4 MHz !!!!zad1 ma byc DIVA2!!!!
  101. BCSCTL2 |= SELM0 | SELM1; // MCLK= LFTX1 =ACLK
  102.  
  103. // Timer_A ustawiamy na 500 kHz
  104. // a przerwanie generujemy co 100 ms
  105. TACTL = TASSEL_1 + MC_1 + ID_3;//+ID_1; // Wybieram ACLK, ACLK/8=500kHz,tryb Up !!!!zad1 ma byc id_1!!!!
  106. CCTL0 = CCIE; // w31czenie przerwan od CCR0
  107. CCR0=50000; // podzielnik 50000: przerwanie co 100 ms
  108.  
  109. _EINT(); // w31czenie przerwan
  110. Wczytywanie_znakow();
  111. for (;;){
  112. _BIS_SR(LPM3_bits); // przejscie do trybu LPM3
  113. Game();
  114. }
  115. }
  116.  
  117. // procedura obslugi przerwania od TimerA
  118.  
  119. #pragma vector=TIMERA0_VECTOR
  120. __interrupt void Timer_A (void){
  121. ++licznik;
  122. _BIC_SR_IRQ(LPM3_bits); // wyjocie z trybu LPM3
  123. }
  124.  
  125. void InitPortsLcd(void)
  126. {
  127. P2SEL = 0;
  128. P2OUT = 0;
  129. P2DIR = ~BIT0; //only P2.0 is input
  130. }
  131.  
  132. void putc(char c) {
  133. SEND_CHAR(c);
  134. }
  135.  
  136. void clearDisplay() {
  137. SEND_CMD(CLR_DISP);
  138. Delayx100us(10);
  139. }
  140.  
  141. void Delay (unsigned int a)
  142. {
  143. int k;
  144. for (k=0 ; k != a; ++k) {
  145. _NOP();
  146. _NOP();
  147. _NOP();
  148. _NOP();
  149. }
  150. }
  151.  
  152. void Delayx100us(unsigned char b)
  153. {
  154. int j;
  155. for (j=0; j!=b; ++j) Delay (_100us);
  156. }
  157.  
  158.  
  159. void _E(void)
  160. {
  161. bitset(P2OUT,E); //toggle E for LCD
  162. Delay(_10us);
  163. bitclr(P2OUT,E);
  164. }
  165.  
  166.  
  167. void SEND_CHAR (unsigned char d)
  168. {
  169. int temp;
  170. Delayx100us(5); //.5ms
  171. temp = d & 0xf0; //get upper nibble
  172. LCD_Data &= 0x0f;
  173. LCD_Data |= temp;
  174. bitset(P2OUT,RS); //set LCD to data mode
  175. _E(); //toggle E for LCD
  176. temp = d & 0x0f;
  177. temp = temp << 4; //get down nibble
  178. LCD_Data &= 0x0f;
  179. LCD_Data |= temp;
  180. bitset(P2OUT,RS); //set LCD to data mode
  181. _E(); //toggle E for LCD
  182. }
  183.  
  184. void SEND_CMD (unsigned char e)
  185. {
  186. int temp;
  187. Delayx100us(10); //10ms
  188. temp = e & 0xf0; //get upper nibble
  189. LCD_Data &= 0x0f;
  190. LCD_Data |= temp; //send CMD to LCD
  191. bitclr(P2OUT,RS); //set LCD to CMD mode
  192. _E(); //toggle E for LCD
  193. temp = e & 0x0f;
  194. temp = temp << 4; //get down nibble
  195. LCD_Data &= 0x0f;
  196. LCD_Data |= temp;
  197. bitclr(P2OUT,RS); //set LCD to CMD mode
  198. _E(); //toggle E for LCD
  199. }
  200.  
  201. void InitLCD(void)
  202. {
  203. bitclr(P2OUT,RS);
  204. Delayx100us(250); //Delay 100ms
  205. Delayx100us(250);
  206. Delayx100us(250);
  207. Delayx100us(250);
  208. LCD_Data |= BIT4 | BIT5; //D7-D4 = 0011
  209. LCD_Data &= ~BIT6 & ~BIT7;
  210. _E(); //toggle E for LCD
  211. Delayx100us(100); //10ms
  212. _E(); //toggle E for LCD
  213. Delayx100us(100); //10ms
  214. _E(); //toggle E for LCD
  215. Delayx100us(100); //10ms
  216. LCD_Data &= ~BIT4;
  217. _E(); //toggle E for LCD
  218.  
  219. SEND_CMD(DISP_ON);
  220. SEND_CMD(CLR_DISP);
  221. Delayx100us(250);
  222. Delayx100us(250);
  223. Delayx100us(250);
  224. Delayx100us(250);
  225. }
  226. //-----Przelicznik liczb-----------
  227. void przelicznik(long x){
  228. if(x >= 10)
  229. przelicznik(x / 10);
  230. int liczba = x%10 + 48;
  231.  
  232. SEND_CHAR(liczba);
  233. }
  234.  
  235.  
  236. void Game(){
  237. //przyciski
  238.  
  239. if(licznik%10 == 0){
  240. wyswietl();
  241. }
  242.  
  243. }
  244.  
  245. void Wyswietl(){
  246. P2OUT ^=BIT1; //zapal diode
  247.  
  248. }
  249.  
  250. void delay (unsigned int n){
  251. unsigned int i;
  252. for (i=0;i<n;i++){};
  253. }
  254.  
  255. void Wczytywanie_znakow(){
  256. SEND_CMD(0x40);
  257.  
  258. int jablko_gora[] = {0x0, 0x4, 0xe, 0x4, 0x0, 0x0, 0x0, 0x0};
  259. int jablko_dol[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x4};
  260. int jablko_gora_snake[] = {0x0, 0x4, 0xe, 0x4, 0x0, 0xe, 0xe, 0xe};
  261. int jablko_dol_snake[] = {0x0, 0xe, 0xe, 0xe, 0x0, 0x4, 0xe, 0x4};
  262. int snake_dol[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xe, 0xe};
  263. int snake_gora[] = {0x0, 0xe, 0xe, 0xe, 0x0, 0x0, 0x0, 0x0};
  264. int snake_full[] = {0x0, 0xe, 0xe, 0xe, 0x0, 0xe, 0xe, 0xe};
  265.  
  266. int i;
  267. for(i = 0; i<8; i++){
  268. SEND_CHAR(jablko_gora[i]);
  269. }
  270. for(i = 0; i<8; i++){
  271. SEND_CHAR(jablko_dol[i]);
  272. }
  273. for(i = 0; i<8; i++){
  274. SEND_CHAR(jablko_gora_snake[i]);
  275. }
  276. for(i = 0; i<8; i++){
  277. SEND_CHAR(jablko_dol_snake[i]);
  278. }
  279. for(i = 0; i<8; i++){
  280. SEND_CHAR(snake_dol[i]);
  281. }
  282. for(i = 0; i<8; i++){
  283. SEND_CHAR(snake_gora[i]);
  284. }
  285. for(i = 0; i<8; i++){
  286. SEND_CHAR(snake_full[i]);
  287. }
  288.  
  289. SEND_CMD(0x80);
  290.  
  291.  
  292. char napis[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
  293.  
  294. //SEND_CMD(0xc0); DRUGA LINIA
  295.  
  296. for(i = 0; i<7; i++){
  297. SEND_CHAR(napis[i]);
  298. }
  299.  
  300. SEND_CMD(0xc0);
  301.  
  302. for(i = 0; i<7; i++){
  303. SEND_CHAR(napis[i]);
  304. }
  305. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement