PIC LCD代码未在Proteus 8上运行

时间:2015-06-15 13:46:21

标签: pic lcd

我正在学习如何使用CCS PCWHD IDE C编译器对PIC控制器进行编程。我尝试使用C代码在Proteus 8的LCD显示器上显示消息。

我编写的代码编译,生成.HEX和.COF文件没有问题。但是,当我尝试在Proteus 8上模拟这个代码时,我看到的只是LCD屏幕打开。没有闪烁的光标或文本出现。我已经对连接和Proteus原理图进行了三重检查,但在那里找不到任何问题。

我使用带有4MHz外部晶振的PIC16F877A微控制器我使用的LCD显示器是LM016L(16x2 LCD显示器)。我无法理解Proteus,C编译器或我的代码是否存在问题?

我写的代码如下:

#include <16F877A.h>      

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=4000000)         //4MHz Crystal

#use fast_io(b)

#byte ADCON1=0x9F 

//Implementing the LCD onto Port B
#define PORTB=0x06        
#define LCD_ENABLE_PIN PIN_B2                    
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA_PORT PORTB
#define  LCD_DATA4    PIN_B4                  
#define  LCD_DATA5    PIN_B5
#define  LCD_DATA6    PIN_B6
#define  LCD_DATA7    PIN_B7                 
#define LCD_TYPE 2        //2 Line display  

#include <lcd.c>      // LCD library

void main()
{ 
   set_tris_b(0x00);  //Port B is completely output
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   //TODO: User Code

 lcd_init();
 delay_ms(10);
   while (TRUE)
   {    
       lcd_send_byte(0,0x0e);  //Blinking Cursor
       delay_ms(10);
       printf(lcd_putc,"\fHello");
       printf(lcd_putc,"\nWorld");                                           
       delay_ms(1000);                 
       printf(lcd_putc,"\fMy");            
       printf(lcd_putc,"\nFirst");   
       delay_ms(1000); 
       lcd_gotoxy(5,1); //Row 1, Column 5
       delay_ms(10);
       printf(lcd_putc,"\fPIC");                        
       lcd_gotoxy(1,2); //Row 2 column 5   
       delay_ms(10);
       printf(lcd_putc,"Project");   
       delay_ms(1000);                                       


   }
}     

1 个答案:

答案 0 :(得分:1)

  • 您必须初始化微控制器时钟OSCCON),这在给定代码中不存在。
  • 您要禁用ADC,因此您使用了setup_adc_ports(NO_ANALOGS);

    因此,不需要下一行setup_adc(ADC_CLOCK_DIV_2);代码。

  • 确保 R \ W 引脚已连接到ground

  • 对比度调整电阻应该在那里

请查看以下图片以获取连接:

enter image description here

This link包含Micro C中的代码,供您参考