From Gamboge Hedgehog, 7 Months ago, written in Text.
Embed
  1. /*16x2 lcd
  2. /----------------------------------------/
  3. BAGLANTILAR:
  4. LCD RS: PF1
  5. LCD EN: PF2
  6. LCD DATA: PD0 - PD3 (d4 - d7 lcd)
  7. LED DATA : PB0 - PB3
  8. /---------------------------------------/
  9. */
  10.  
  11. #include "inc/tm4c123gh6pm.h"
  12. #include "driverlib/sysctl.h"
  13. #include <stdlib.h>
  14.  
  15. #define LcdDataBits GPIO_PORTD_DATA_R  // P1.7 - D7, ....., P1.4 - D4
  16. #define LedDataBits GPIO_PORTB_DATA_R
  17. #define Kirmizi_Led 0
  18. #define Beyaz_Led 1
  19. #define Yesil_Led 2
  20. #define Mavi_Led 3
  21.  
  22. #define BIT_SET(PORT, PIN) do { \
  23.         PORT |= 1<<PIN; \
  24. } while (0)
  25.  
  26. #define BIT_RESET(PORT, PIN) do { \
  27.         PORT &= ~(1<<PIN); \
  28. } while (0)
  29.  
  30.  
  31. volatile unsigned long ulLoop;
  32.  
  33. void setup()
  34. {
  35.  
  36.         SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
  37.         SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOD;
  38.         SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOE;
  39.         SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOB;
  40.  
  41.         ulLoop = SYSCTL_RCGC2_R;
  42.  
  43.         GPIO_PORTD_DIR_R = 0xff;
  44.         GPIO_PORTD_DEN_R = 0xff;
  45.  
  46.         GPIO_PORTE_DIR_R = 0xff;
  47.         GPIO_PORTE_DEN_R = 0xff;
  48.  
  49.         GPIO_PORTB_DIR_R = 0xff;
  50.         GPIO_PORTB_DEN_R = 0xff;
  51.  
  52. }
  53. /*
  54. void RS(int x){
  55.         GPIO_PORTE_DATA_R = ((GPIO_PORTE_DATA_R & ~(1<<1)) | (x<<1));
  56. }
  57.  
  58. void EN(int x){
  59.         GPIO_PORTE_DATA_R = ((GPIO_PORTE_DATA_R & ~(1<<2)) | (x<<2));
  60. }
  61.  
  62. void resetEN(){
  63.         EN(1);
  64.         EN(0);
  65. }*/
  66.  
  67. #define RS(X) GPIO_PORTE_DATA_R = ((GPIO_PORTE_DATA_R & ~(1<<1)) | (X<<1))
  68.  
  69. #define EN(X) GPIO_PORTE_DATA_R = ((GPIO_PORTE_DATA_R & ~(1<<2)) | (X<<2))
  70.  
  71. #define resetEN do{EN(1); SysCtlDelay(500); EN(0);}while(0)
  72.  
  73.  
  74. //#define LINE1 cmd(0x80)
  75. //#define LINE2 cmd(0xc0)
  76.  
  77.  
  78. void data(unsigned char c)
  79. {
  80.         LcdDataBits = (c & 0xf0);
  81.         RS(1);
  82.         resetEN;
  83.         SysCtlDelay(50000);
  84.         LcdDataBits = (c & 0x0f) << 4;
  85.         RS(1);
  86.         resetEN;
  87.         SysCtlDelay(50000);
  88.         /*
  89.             RS(1);
  90.             SysCtlDelay(400);
  91.             databits = c >>4;
  92.             LCD_STROBE;
  93.             databits = c;
  94.             LCD_STROBE;
  95.         */
  96. }
  97.  
  98. void cmd(unsigned char c)
  99. {
  100.         LcdDataBits = (c & 0xf0);
  101.         RS(0);
  102.         resetEN;
  103.         SysCtlDelay(50000);
  104.         LcdDataBits = (c & 0x0f) << 4;
  105.         RS(0);
  106.         resetEN;
  107.         SysCtlDelay(50000);
  108.         /*
  109.     RS(0);
  110.     SysCtlDelay(400);
  111.     LcdDataBits = c >>4;
  112.     resetEN;
  113.     LcdDataBits = c;
  114.     resetEN;
  115.     */
  116. }
  117.  
  118. void pseudo_8bit_cmd(unsigned char c)
  119. {
  120.     RS(0);
  121.     SysCtlDelay(15000);
  122.     LcdDataBits = (c);
  123.     resetEN;
  124.     SysCtlDelay(50000);
  125. }
  126.  
  127. void clear(void)
  128. {
  129.     cmd(0x01);
  130.     SysCtlDelay(30000);
  131. }
  132.  
  133. void lcd_init()
  134. {
  135.     pseudo_8bit_cmd(0x30);
  136.     pseudo_8bit_cmd(0x30);
  137.     pseudo_8bit_cmd(0x30);
  138.     pseudo_8bit_cmd(0x20);
  139.     cmd(0x28);             // 2 Satir olarak ayarla
  140.     cmd(0xC0);
  141.     cmd(0x06);
  142.     cmd(0x80);
  143.     cmd(0x28);
  144.     cmd(0x0f);
  145.     clear();
  146.     /*cmd(0x0c);             // Cursor 'ı görünür yap
  147.     clear();               // Ekranı temizle
  148.     cmd(0x6);
  149.     */              // Yazi modunu aç(cursor otomatik taşı)
  150. }
  151.  
  152. void setCursor(char x,char y){
  153.  
  154.         if(x==1)
  155.                 cmd(0x80+((y-1)%16));
  156.             else
  157.                 cmd(0xC0+((y-1)%16));
  158.  
  159. }
  160.  
  161. void writeString(char *p)
  162. {
  163.     while(*p) data(*p++);
  164. }
  165.  
  166.  
  167. void KirmiziLed(){
  168.  
  169.     BIT_SET(LedDataBits,Kirmizi_Led);
  170.     BIT_RESET(LedDataBits,Beyaz_Led);
  171.     BIT_RESET(LedDataBits,Yesil_Led);
  172.     BIT_RESET(LedDataBits,Mavi_Led);
  173.     clear();
  174.     setCursor(1,1);
  175.     writeString("Kocaeli uni");
  176.     SysCtlDelay(32000000);
  177.     setCursor(2,1);
  178.     writeString("Mert Eroglu");
  179.  
  180.     SysCtlDelay(32000000);
  181. }
  182.  
  183. void BeyazLed(){
  184.  
  185.     BIT_SET(LedDataBits,Beyaz_Led);
  186.     BIT_RESET(LedDataBits,Kirmizi_Led);
  187.     BIT_RESET(LedDataBits,Yesil_Led);
  188.     BIT_RESET(LedDataBits,Mavi_Led);
  189.         clear();
  190.     setCursor(1,1);
  191.     writeString("Mert Eroglu");
  192.     SysCtlDelay(32000000);
  193.     setCursor(2,1);
  194.     writeString("Kocaeli Uni");
  195.  
  196.     SysCtlDelay(32000000);
  197. }
  198.  
  199. void YesilLed(){
  200.  
  201.     BIT_SET(LedDataBits,Yesil_Led);
  202.     BIT_RESET(LedDataBits,Kirmizi_Led);
  203.     BIT_RESET(LedDataBits,Beyaz_Led);
  204.     BIT_RESET(LedDataBits,Mavi_Led);
  205.  
  206.         clear();
  207.         setCursor(1,1);
  208.     writeString("Kocaeli uni");
  209.  
  210.     for(int i = 0; i< 30;i++){
  211.         cmd(0x1E);
  212.         SysCtlDelay(8000000);
  213.     }
  214.  
  215.     SysCtlDelay(32000000);
  216.     setCursor(2,1);
  217.     writeString("Mert Eroglu");
  218.  
  219.     for(int i = 0; i< 30;i++){
  220.         cmd(0x1E);
  221.         SysCtlDelay(8000000);
  222.        }
  223.  
  224.     SysCtlDelay(32000000);
  225. }
  226.  
  227. void MaviLed(){
  228.  
  229.     BIT_SET(LedDataBits,Mavi_Led);
  230.     BIT_RESET(LedDataBits,Kirmizi_Led);
  231.     BIT_RESET(LedDataBits,Beyaz_Led);
  232.     BIT_RESET(LedDataBits,Yesil_Led);
  233.  
  234.     clear();
  235.         setCursor(1,16);
  236.         writeString("Kocaeli uni");
  237.  
  238.         for(int i = 0; i< 30;i++){
  239.                 cmd(0x18);
  240.                 SysCtlDelay(8000000);
  241.         }
  242.  
  243.         SysCtlDelay(16000000);
  244.  
  245.         setCursor(2,16);
  246.         writeString("Mert Eroglu");
  247.  
  248.         for(int i = 0; i< 30;i++){
  249.                 cmd(0x18);
  250.                 SysCtlDelay(8000000);
  251.         }
  252.  
  253.         SysCtlDelay(32000000);
  254.  
  255. }
  256.  
  257.  
  258. int main()
  259. {
  260.         setup();
  261.         lcd_init();
  262.  
  263.         int random = 0;
  264.  
  265.             while(1){
  266.  
  267.                 random = rand()%4;
  268.  
  269.                 switch(random){
  270.                     case 0:
  271.                         KirmiziLed();
  272.                         break;
  273.                     case 1:
  274.                         BeyazLed();
  275.                         break;
  276.                     case 2:
  277.                         YesilLed();
  278.                         break;
  279.                     case 3:
  280.                         MaviLed();
  281.                         break;
  282.                 }
  283.  
  284.                 SysCtlDelay(32000000);
  285.  
  286.                 }
  287. }
  288.