Guest User

Untitled

a guest
Nov 24th, 2012
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. lcd.c :
  2.  
  3. */
  4. /**
  5. * \addtogroup LCD
  6. * @{
  7. */
  8. #include <absacc.h>
  9. #include "LCD.h"
  10. #include <intrins.h>
  11.  
  12. #define LCD_IR 0
  13. #define LCD_DR 1
  14.  
  15. //unsigned char puchStr[10] = "Hallo";
  16. //LCD_WriteString(char*puchStr);
  17. //index = 0;
  18. //while(puchStr[index]);
  19. //LCD_WriteChar(puchStr[index]);
  20. //index++;
  21.  
  22. /**
  23. * Initialisiere Display
  24. * @param keine
  25. * @return nichts
  26. */
  27. void LCD_Init()
  28. {
  29.     LCD_WriteIR(LCD_FUNCTION_SET | LCD_FUNCTION_SET_8BIT); //das | =bitweise verknüpfen
  30.     LCD_Wait100us(50); //wait 5ms
  31.     LCD_WriteIR(LCD_FUNCTION_SET | LCD_FUNCTION_SET_8BIT);
  32.    
  33.     LCD_Wait100us(2); //wait 100us
  34.     LCD_WriteIR(LCD_FUNCTION_SET | LCD_FUNCTION_SET_8BIT);
  35.     LCD_Wait100us(2); //wait 100us
  36.    
  37.    
  38.     while(LCD_IsBusy())
  39.     {
  40.    
  41.     }
  42.    
  43.     LCD_WriteIR(LCD_FUNCTION_SET | LCD_FUNCTION_SET_8BIT | LCD_FUNCTION_SET_2LINE | LCD_FUNCTION_SET_F5x8 );
  44.  
  45.     LCD_WriteIR(LCD_DC_DISPL | LCD_DC_DISPL_DOFF | LCD_DC_DISPL_B);
  46.  
  47.     LCD_WriteIR(LCD_CLEAR_DISPL);
  48.  
  49.     LCD_WriteIR(LCD_ENTRY_MODE_SET | LCD_ENTRY_MODE_SET_I | LCD_ENTRY_MODE_SET_S_OFF);
  50.    
  51.     LCD_WriteIR(LCD_DC_DISPL | LCD_DC_DISPL_DON | LCD_DC_DISPL_CON  | LCD_DC_DISPL_B);
  52.  
  53. }
  54. /**
  55. * Schreiben ins Instructor Register
  56. * @param uchInstr
  57. * @return nichts
  58. */
  59. void LCD_WriteIR(unsigned char uchInstr)
  60. {
  61.     LCD_Write(uchInstr, LCD_IR);
  62. }
  63. /**
  64. * Schreiben ins Data Register
  65. * @param uchInstr
  66. * @return nichts
  67. */
  68. void LCD_WriteDR(unsigned char uchInstr)
  69. {
  70.     LCD_Write(uchInstr, LCD_DR);
  71. }
  72. /**
  73. * Ruft LCD_WriteDR oder LCD_WriteIR auf
  74. * @param uchVal
  75. * @param bReg
  76. * @param bCheckB
  77. * @return nichts
  78. */
  79. void LCD_Write(unsigned char uchVal, bit bReg)
  80. {
  81.     #ifdef LCD_MEMMAPPED
  82.  
  83.  
  84.      if(bReg == LCD_IR)
  85.          {
  86.              //write IR
  87.              XBYTE[LCD_ADDR_IR] = uchVal;
  88.          }
  89.          else
  90.          {
  91.              //write DR
  92.              XBYTE[LCD_ADDR_DR] = uchVal;
  93.          }
  94.          /*
  95.          while(LCD IsBusy)
  96.          LCD_WriteIRNoBF(val){
  97.          LCD_Write(val,LCD_IR,0)
  98.          }LCD_WriteIR(val){
  99.          LCD_Write(val,LCD_IR,1)
  100.          }
  101.          LCD_WriteDR(val){
  102.          LCD_Write(val,DR,1)
  103.          }
  104.          */
  105.     #elif defined (LCD_PORTMAPPDE)
  106.     //Code für PORT
  107.     //SETB
  108.     #else
  109.          #error "Fehler beim Definieren von Port- oder Memmapped"
  110.     #endif
  111. }
  112. /**
  113. * Funktion zum Warten des Vilefachen von 100us(NOP = 0.5us)
  114. * @param uchTimes
  115. * @return nichts
  116. */
  117. void LCD_Wait100us(unsigned char uchTimes)
  118. {
  119.   unsigned char uchTemp;
  120.     while(uchTimes != 0)
  121.     {
  122.       for(uchTemp = 0; uchTemp <= 50; uchTemp++)
  123.       {
  124.       _nop_();
  125.       _nop_();
  126.       _nop_();
  127.       }
  128.       uchTimes--;
  129.   }
  130. }
  131. /**
  132. * Erkennt ob das BusyFlag gesetzt ist
  133. * @return
  134. */
  135. bit LCD_IsBusy()
  136. {
  137.     return(LCD_Read(LCD_ADDR_IR) & LCD_BF_MASK);
  138. }
  139. /**
  140. * Ruft oder LCD_ReadIR auf
  141. * @param bReg
  142. * @return
  143. */
  144. unsigned char LCD_Read(bit bReg)
  145. {
  146.     if(bReg == LCD_IR)
  147.     {
  148.              //read IR
  149.       return(XBYTE[LCD_ADDR_IR]);
  150.     }
  151.     else
  152.     {
  153.              //read DR
  154.       return(XBYTE[LCD_ADDR_DR]);
  155.     }
  156. }
  157. /**
  158. * Liest vom Data Register
  159. * @param keine
  160. * @return  gelesenes
  161. */
  162. unsigned char LCD_ReadDR()
  163. {
  164.     return(LCD_Read(LCD_DR));
  165. }
  166. /**
  167. * Liest vom Instruction Register
  168. * @param keine
  169. * @return gelesenes
  170. */
  171. unsigned char LCD_ReadIR()
  172. {
  173.     return(LCD_Read(LCD_IR));
  174. }
  175. /**
  176. * Setzt den Coursor auf eine bestimmte Position
  177. * @param uchZeile
  178. * @param uchSpalte
  179. * @return
  180. */
  181. unsigned char Cursor_GoToXY(unsigned char uchZeile, unsigned char uchSpalte)
  182. {
  183.    
  184. }
  185.  
  186. char putchar(char chc)
  187. {
  188.     if(chc = '\n')
  189.     {
  190.        
  191.     }  
  192.    
  193.     if(chc == '\t')
  194.     {
  195.        
  196.     }
  197.  
  198.     if(chc == '\b')
  199.     {
  200.        
  201.     }
  202.  
  203.     LCD_WriteDR(chc);
  204.     return (chc);
  205. }
  206. //@}
  207.  
  208. lcd.h:
  209.  
  210. #ifndef _LCD_H
  211. #define _LCD_H
  212.  
  213. //entweder MEM- oder PORT- MAPPED einstellen
  214. #define LCD_MEMMAPPED
  215. //#define LCD_PORTMAPPED
  216.  
  217. //MEMMAPPED settings
  218. #define LCD_ADDR_IR 0x0000
  219. #define LCD_ADDR_DR 0x4000
  220.  
  221. //PORTMAPPED settings
  222.  
  223. #define LCD_CLEAR_DISPL 0x01 //oder (1<<5)=einser um 5 stellen nach links versch.
  224. #define LCD_RETURN_HOME 0x02
  225. #define LCD_ENTRY_MODE_SET 0x04
  226. #define LCD_ENTRY_MODE_SET_I 0x02
  227. #define LCD_ENTRY_MODE_SET_D 0x00
  228. #define LCD_ENTRY_MODE_SET_S_ON 0x01
  229. #define LCD_ENTRY_MODE_SET_S_OFF 0x00
  230. #define LCD_DC_DISPL 0x08
  231. #define LCD_DC_DISPL_DON 0x04
  232. #define LCD_DC_DISPL_DOFF 0x00
  233. #define LCD_DC_DISPL_CON 0x02
  234. #define LCD_DC_DISPL_COFF 0x00
  235. #define LCD_DC_DISPL_B 0x01
  236. #define LCD_CDS 0x10
  237. #define LCD_CDS_DISPL_SHIFT 0x08
  238. #define LCD_CDS_CURSOR_MOVE 0x00
  239. #define LCD_CDS_LINKS 0x00
  240. #define LCD_CDS_RECHTS 0x04
  241. #define LCD_FUNCTION_SET 0x20
  242. #define LCD_FUNCTION_SET_4BIT 0x00
  243. #define LCD_FUNCTION_SET_8BIT 0x10
  244. #define LCD_FUNCTION_SET_1LINE 0x00
  245. #define LCD_FUNCTION_SET_2LINE 0x08
  246. #define LCD_FUNCTION_SET_F5x10 0x04
  247. #define LCD_FUNCTION_SET_F5x8 0x00
  248.  
  249. #define LCD_BF_MASK 0x80
  250. #define LCD_LINE_LENGHT 20
  251. #define LCD_ADDR_LINE1 0
  252. #define LCD_ADDR_LINE2 0x40
  253. #define LCD_ADDR_LINE3 (LCD_ADDR_LINE1+LCD_LINE_LENGHT)
  254.  
  255. //(mit const davor in den code speicher)char la[] = {LCD_ADDR_LINE1, LCD_ADDR_LINE2, LCD_ADDR_LINE3}
  256.  
  257. //Prototypes
  258. void LCD_Init();
  259.  
  260. void LCD_WriteIR(unsigned char uchInstr);
  261.  
  262. void LCD_WriteDR(unsigned char uchInstr);
  263.  
  264. void LCD_Write(unsigned char uchVal, bit bReg);
  265.  
  266. void LCD_Wait100us(unsigned char uchTimes);
  267.  
  268. bit LCD_IsBusy();
  269.  
  270. unsigned char LCD_Read(bit bReg);
  271.  
  272. unsigned char LCD_ReadDR();
  273.  
  274. unsigned char LCD_ReadIR();
  275.  
  276. unsigned char Cursor_GotToXY(unsigned char uchZeile, unsigned char uchSpalte);
  277.  
  278. #endif /* _LCD_H */
  279.  
  280.  
  281. main.c:
  282.  
  283. #include <reg8253.h>
  284. #include "LCD.h"
  285. #include <stdio.h>
  286.  
  287. void main (void)
  288. {
  289.     LCD_Init();
  290.   printf("hallo\t");
  291. }
Advertisement
Add Comment
Please, Sign In to add comment