Using PIC 16f819 and an LCD screen, code a game of tetris in C language that will use the PIC and four buttons to play tetris on the LCD.
The game should use the clock/timer fuction of the PIC- such as to time the length of each game and the eeprom function- to record th eplyaers high scores, as well as three levels of difficulty/speeds.
You are given the code to set up the LCD and the eeprom code.
DM3330 CLASS ASSIGNMENT Using PIC 16f819 and an LCD screen, code a game of tetris in C language that will use the PIC and four buttons to play tetris on the LCD. The game should use the clock/timer fuction of the PIC- such as to time the length of each game and the eeprom function- to record th eplyaers high scores, as well as three levels of difficulty/speeds. You are given the code to set up the LCD and the eeprom code. Nokia LCD Code (Can be attached as a text file) //Nokia 5110 display example using basic font driver //Separate large font driver can be included - experimental //No graphic routines included (so far) //Dr A Vilches #include <16f819.h>//Include 16F819 header file #device PASS_STRINGS = IN_RAM//Allows pointers to ROM strings #fuses INTRC_IO,NOWDT,NOPROTECT,MCLR,NOBROWNOUT #use delay(clock=8000000) #include "5110.c"//Non SPI driver //#include "5110LargeFont.c"//Add if 10x15 large fonts wanted void main(){ delay_ms(100); nokia_init();//Initialise module //nokia_clear_screen();//Clear screen //nokia_printchar10x15('0');//Print a large number //nokia_printchar_inv('A'); //Print character in inverse mode //nokia_gotoxy(0,1);//Move to screen position prints("Hi everyone!");//x = 0-83 and y = 0-5 prints("\nthis is some"); prints("\nsmall text!!");//Print a string prints("\n ");//preceed with \r to move to start of line prints("\nTest OK");//preceed with \n to move to next line down while(1); } Test eeprom code /* 24512 EEPROM Test code Writes 0 to 255 to the first 256 memory locations And then reads it back to the PC via RS232 Must define RS232 pins in main code: #use rs232(baud=9600,xmit=PIN_B5,rcv=PIN_B2) Must define I2C pins below Must include this file before main Run using TestEeprom(); */ #define EEPROM_SDA PIN_A0 #define EEPROM_SCL PIN_A1 #include <24512.c> void TestEeprom(){ int c=0; printf("\nInitialising Eeprom."); init_ext_eeprom(); printf("..Ok\n"); while(c<255){ write_ext_eeprom(c,="" c);="" printf("%c:%x="" ",="" c,="" read_ext_eeprom(c));="" c++;="" }="" }="" include="" file="" (available="" as="" a="" separate="" text="" file)="" *graphic="" lcd="" nokia="" 5110="" (lph7779)="" routines="" v1="" -="" non="" spi="" pin="" define:="" 1.="" rst="" -="" reset="" 2.="" ce="" -="" chip="" select="" *="" 3.="" dc="" -="" data/instruction="" selection="" *="" 4.="" din="" -="" serial="" data="" line="" *="" 5.="" clk="" -="" serial="" clock="" line="" *="" 6.="" vcc="" -="" power="" input="" (3.3v="" or="" 5v)="" 7.="" bl="" -="" backlight="" control="" 8.="" gnd="" -="" ground="" */="" #define="" nok_sda="" pin_b2="" #define="" nok_sclk="" pin_b4="" #define="" nok_dc="" pin_a1="" #define="" nok_cs="" pin_b3="" #define="" nok_res="" pin_b0="" #define="" high_nok_dc="" output_high(nok_dc)="" #define="" high_nok_cs="" output_high(nok_cs)="" #define="" high_nok_res="" output_high(nok_res)="" #define="" high_nok_sda="" output_high(nok_sda);="" #define="" high_nok_sclk="" output_high(nok_sclk);="" #define="" low_nok_dc="" output_low(nok_dc)="" #define="" low_nok_cs="" output_low(nok_cs)="" #define="" low_nok_res="" output_low(nok_res)="" #define="" low_nok_sda="" output_low(nok_sda);="" #define="" low_nok_sclk="" output_low(nok_sclk);="" #define="" null="" '\0'="" #define="" lcd_x_res="" 84="" #define="" lcd_y_res="" 48="" #define="" lcd_cache_size="" ((lcd_x_res="" *="" lcd_y_res)="" 8="" )="" char="" line="0;" max="" 6="" lines="" on="" display="" page="" char="" char_col,charsel,charpos,chardata;="" int16="" ddram;="" byte="" const="" table5[240]="{" 0x00,0x00,0x00,0x00,0x00,="" 20="" space="" ascii="" table="" for="" nokia="" lcd:="" 96="" rows="" *="" 5="" bytes="480" bytes="" 0x00,0x00,0x5f,0x00,0x00,="" 21="" !="" 0x00,0x07,0x00,0x07,0x00,="" 22="" "="" 0x14,0x7f,0x14,0x7f,0x14,="" 23="" #="" 0x24,0x2a,0x7f,0x2a,0x12,="" 24="" $="" 0x23,0x13,0x08,0x64,0x62,="" 25="" %="" 0x36,0x49,0x55,0x22,0x50,="" 26="" &="" 0x00,0x05,0x03,0x00,0x00,="" 27="" '="" 0x00,0x1c,0x22,0x41,0x00,="" 28="" (="" 0x00,0x41,0x22,0x1c,0x00,="" 29="" )="" 0x14,0x08,0x3e,0x08,0x14,="" 2a="" *="" 0x08,0x08,0x3e,0x08,0x08,="" 2b="" +="" 0x00,0x50,0x30,0x00,0x00,="" 2c="" ,="" 0x08,0x08,0x08,0x08,0x08,="" 2d="" -="" 0x00,0x60,0x60,0x00,0x00,="" 2e="" .="" 0x20,0x10,0x08,0x04,0x02,="" 2f="" 0x3e,0x51,0x49,0x45,0x3e,="" 30="" 0="" 0x00,0x42,0x7f,0x40,0x00,="" 31="" 1="" 0x42,0x61,0x51,0x49,0x46,="" 32="" 2="" 0x21,0x41,0x45,0x4b,0x31,="" 33="" 3="" 0x18,0x14,0x12,0x7f,0x10,="" 34="" 4="" 0x27,0x45,0x45,0x45,0x39,="" 35="" 5="" 0x3c,0x4a,0x49,0x49,0x30,="" 36="" 6="" 0x01,0x71,0x09,0x05,0x03,="" 37="" 7="" 0x36,0x49,0x49,0x49,0x36,="" 38="" 8="" 0x06,0x49,0x49,0x29,0x1e,="" 39="" 9="" 0x00,0x36,0x36,0x00,0x00,="" 3a="" :="" 0x00,0x56,0x36,0x00,0x00,="" 3b="" ;="" 0x08,0x14,0x22,0x41,0x00,="" 3c="">255){>< 0x14,0x14,0x14,0x14,0x14,="" 3d="0x00,0x41,0x22,0x14,0x08," 3e=""> 0x02,0x01,0x51,0x09,0x06, // 3f ? 0x32,0x49,0x79,0x41,0x3e, // 40 @ 0x7e,0x11,0x11,0x11,0x7e, // 41 A 0x7f,0x49,0x49,0x49,0x36, // 42 B 0x3e,0x41,0x41,0x41,0x22, // 43 C 0x7f,0x41,0x41,0x22,0x1c, // 44 D 0x7f,0x49,0x49,0x49,0x41, // 45 E 0x7f,0x09,0x09,0x09,0x01, // 46 F 0x3e,0x41,0x49,0x49,0x7a, // 47 G 0x7f,0x08,0x08,0x08,0x7f, // 48 H 0x00,0x41,0x7f,0x41,0x00, // 49 I 0x20,0x40,0x41,0x3f,0x01, // 4a J 0x7f,0x08,0x14,0x22,0x41, // 4b K 0x7f,0x40,0x40,0x40,0x40, // 4c L 0x7f,0x02,0x0c,0x02,0x7f, // 4d M 0x7f,0x04,0x08,0x10,0x7f, // 4e N 0x3e,0x41,0x41,0x41,0x3e // 4f O }; BYTE const TABLE6[240]= { 0x7f,0x09,0x09,0x09,0x06, // 50 P 0x3e,0x41,0x51,0x21,0x5e, // 51 Q 0x7f,0x09,0x19,0x29,0x46, // 52 R 0x46,0x49,0x49,0x49,0x31, // 53 S 0x01,0x01,0x7f,0x01,0x01, // 54 T 0x3f,0x40,0x40,0x40,0x3f, // 55 U 0x1f,0x20,0x40,0x20,0x1f, // 56 V 0x3f,0x40,0x38,0x40,0x3f, // 57 W 0x63,0x14,0x08,0x14,0x63, // 58 X 0x07,0x08,0x70,0x08,0x07, // 59 Y 0x61,0x51,0x49,0x45,0x43, // 5a Z 0x00,0x7f,0x41,0x41,0x00, // 5b [ 0x02,0x04,0x08,0x10,0x20, // 5c 0x00,0x41,0x41,0x7f,0x00, // 5d 0x04,0x02,0x01,0x02,0x04, // 5e 0x40,0x40,0x40,0x40,0x40, // 5f 0x00,0x01,0x02,0x04,0x00, // 60 0x20,0x54,0x54,0x54,0x78, // 61 a 0x7f,0x48,0x44,0x44,0x38, // 62 b 0x38,0x44,0x44,0x44,0x20, // 63 c 0x38,0x44,0x44,0x48,0x7f, // 64 d 0x38,0x54,0x54,0x54,0x18, // 65 e 0x08,0x7e,0x09,0x01,0x02, // 66 f 0x0c,0x52,0x52,0x52,0x3e, // 67 g 0x7f,0x08,0x04,0x04,0x78, // 68 h 0x00,0x44,0x7d,0x40,0x00, // 69 i 0x20,0x40,0x44,0x3d,0x00, // 6a j 0x7f,0x10,0x28,0x44,0x00, // 6b k 0x00,0x41,0x7f,0x40,0x00, // 6c l 0x7c,0x04,0x18,0x04,0x78, // 6d m 0x7c,0x08,0x04,0x04,0x78, // 6e n 0x38,0x44,0x44,0x44,0x38, // 6f o 0x7c,0x14,0x14,0x14,0x08, // 70 p 0x08,0x14,0x14,0x18,0x7c, // 71 q 0x7c,0x08,0x04,0x04,0x08, // 72 r 0x48,0x54,0x54,0x54,0x20, // 73 s 0x04,0x3f,0x44,0x40,0x20, // 74 t 0x3c,0x40,0x40,0x20,0x7c, // 75 u 0x1c,0x20,0x40,0x20,0x1c, // 76 v 0x3c,0x40,0x30,0x40,0x3c, // 77 w 0x44,0x28,0x10,0x28,0x44, // 78 x 0x0c,0x50,0x50,0x50,0x3c, // 79 y 0x44,0x64,0x54,0x4c,0x44, // 7a z 0x00,0x08,0x36,0x41,0x00, // 7b 0x00,0x00,0x7f,0x00,0x00, // 7c 0x00,0x41,0x36,0x08,0x00, // 7d 0x10,0x08,0x08,0x10,0x08, // 7e 0x78,0x46,0x41,0x46,0x78 // 7f }; /*-----------------------------------------------------------------------------*/ void nokia_write_data_inv(char bytefornokia_data_inv) { char caa; high_nok_dc; low_nok_cs; // chip enabled bytefornokia_data_inv =~ bytefornokia_data_inv; for (caa=8;caa>0;caa--) { low_nok_sclk; if ((bytefornokia_data_inv & 0x80)==0) { low_nok_sda; } else high_nok_sda; high_nok_sclk; bytefornokia_data_inv = bytefornokia_data_inv<1; }="" }="" *-----------------------------------------------------------------------------*/="" void="" nokia_write_dorc(char="" bytefornokia)="" serial="" write="" data="" or="" command="" subroutine="" {="" char="" caa;="" for="" (caa="8;caa">0;caa--) { low_nok_sclk; if ((bytefornokia & 0x80)==0) {1;>24512.c>16f819.h>