標(biāo)題: LCD1602在PIC單片機(jī)中的使用程序 [打印本頁]

作者: xiaos    時(shí)間: 2015-4-3 01:34
標(biāo)題: LCD1602在PIC單片機(jī)中的使用程序
  1. #include<pic.h>
  2. __CONFIG(0x1832);        
  3. //芯片配置字,看門狗關(guān),上電延時(shí)開,掉電檢測關(guān),低壓編程關(guān),加密,4M晶體HS振蕩
  4. #define rs RA1
  5. #define rw RA2
  6. #define e  RA3
  7. const char web[ ]={' ','W','W','W','.','P','I','C','1','6','.','C','O','M',' ',' '};
  8. //顯示公司web地址
  9. const char tel[ ]={'T','E','L','0','7','5','5','-','2','8','1','8','7','9','7','5'};
  10. //顯示公司電話號碼
  11. void init();                   //申明I/O口初始化函數(shù)
  12. void lcd_init();               //申明LCD初始化函數(shù)
  13. void write_web();              //申明顯示公司web地址函數(shù)
  14. void write_tel();              //申明顯示公司tel函數(shù)
  15. void write(char x);            //申明顯示1字節(jié)數(shù)據(jù)函數(shù)
  16. void lcd_enable();             //申明LCD顯示設(shè)置函數(shù)
  17. void delay();                  //申明延時(shí)函數(shù)
  18. //---------------------------------------
  19. //主函數(shù)
  20. void main()
  21. {
  22.     while(1)
  23.       {
  24.         init();                //調(diào)用I/O口初始化函數(shù)
  25.         lcd_init();            //調(diào)用LCD初始化函數(shù)
  26.         write_web();           //調(diào)用顯示公司web地址函數(shù)
  27.         PORTD=0XC0;            //設(shè)置第2行顯示地址
  28.         lcd_enable();          //調(diào)用LCD顯示設(shè)置函數(shù)
  29.         write_tel();           //調(diào)用顯示公司tel函數(shù)
  30.       }
  31. }

  32. //---------------------------------------
  33. //I/O口初始化函數(shù)
  34. void init()
  35. {
  36.     ADCON1=0X07;               //設(shè)置A口為普通I/O口
  37.     TRISA=0X00;                //設(shè)置A口為輸出
  38.     TRISD=0X00;                //設(shè)置D口為輸出
  39. }
  40. //---------------------------------------
  41. //LCD初始化函數(shù)
  42. void lcd_init()
  43. {
  44.     PORTD=0X1;                 //清除顯示
  45.     lcd_enable();
  46.     PORTD=0X38;                //8位2行5*7點(diǎn)陣
  47.     lcd_enable();
  48.     PORTD=0X0e;                //顯示開,光標(biāo)開,閃爍
  49.     lcd_enable();
  50.     PORTD=0X06;                //文字不動,光標(biāo)右移
  51.     lcd_enable();
  52.     PORTD=0X80;                //公司web顯示地址
  53.     lcd_enable();
  54. }

  55. //--------------------------------------
  56. //顯示公司web地址
  57. void write_web()
  58. {
  59.     int i;
  60.     for(i=0;i<0x10;i++)        //一共16字節(jié)數(shù)據(jù)
  61.        {
  62.          write(web[i]);        //查表獲取數(shù)據(jù)并調(diào)用寫一個(gè)字節(jié)數(shù)據(jù)函數(shù)送LCD顯示
  63.        }
  64. }
  65. //--------------------------------------
  66. //顯示公司tel函數(shù)
  67. void write_tel()
  68. {
  69.     int i;
  70.     for(i=0;i<0x10;i++)       //一共顯示16字節(jié)數(shù)據(jù)
  71.        {
  72.          write(tel);       //查表獲取數(shù)據(jù)并調(diào)用寫一個(gè)字節(jié)數(shù)據(jù)函數(shù)送LCD顯示
  73.        }
  74. }
  75.   
  76. //--------------------------------------
  77. //寫一個(gè)字節(jié)數(shù)據(jù)函數(shù)  
  78. void write(char x)
  79. {
  80.   PORTD=x;                   //待顯示數(shù)據(jù)送PORTD口
  81.   rs=1;                      //該字節(jié)數(shù)據(jù)為數(shù)據(jù),而不是命令
  82.   rw=0;                      //此次操作為寫,而不是讀
  83.   e=0;                       //拉低使能信號
  84.   delay();                   //保持使能信號為低一段時(shí)間
  85.   e=1;                       //拉高使能信號,建立LCD操作所需要的上升沿
  86. }
  87. //--------------------------------------
  88. //LCD顯示設(shè)置函數(shù)
  89. void lcd_enable()
  90. {
  91.    rs=0;                     //該字節(jié)數(shù)據(jù)為命令,而不是數(shù)據(jù)
  92.    rw=0;                     //此次操作為寫,而不是讀
  93.    e=0;                      //拉低使能信號
  94.    delay();                  //保持使能信號為低一段時(shí)間
  95.    e=1;                      //拉高使能信號,建立LCD操作所需要的上升沿
  96. }
  97. //--------------------------------------
  98. //延時(shí)函數(shù)
  99. void delay()
  100. {
  101.    int i;
  102.    for(i=0;i<5000;i++);
  103. }
復(fù)制代碼





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1