c8051F040液晶显示程序

发布者:dfdiqc最新更新时间:2018-01-06 来源: eefocus关键字:c8051F040  液晶显示 手机看文章 扫描二维码
随时随地手机看文章

c8051F040液晶显示程序

#include "c8051F040.h" 

#define uchar unsigned char 
#define uint unsigned int 
void os_init(); 
void adc_init();

uchar l; 
uchar h; 
uint temp; 
uchar xdata virt_port; 
bit SPI_BUSY; 
unsigned char xdata tab1[12]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e,0x56}; 

sbit LCDCs=P2^5; 
void os_init(); 
void port_init(); 
void spi_init(); 
void writecode(uchar ins); 
void writEDAta(uchar d); 
void lcdchar (void); 
void lcdinit(); 
void writelcd(uchar spi_data); 
/********************************************************************* 

*主函数 
**********************************************************************/ 
void main() 
{   
    WDTCN = 0xDE;                                           // 关闭看门狗 
    WDTCN = 0xAD; 
    os_init(); 
    adc_init(); 
     port_init(); 
    spi_init(); 
    lcdinit(); 
    SFRPAGE   = CONFIG_PAGE; 
     EIE2      = 0x02;                              //允许ADC中断 
    //IE        = 0x80;                               //允许所有中断 
      
     EIE1      = 0x01; 
     EA=1; 
     while(1) 
    { 
     SFRPAGE   = ADC0_PAGE; 
     AD0INT=0; 
     AD0BUSY=1;     
     while(AD0INT==0); 
     lcdinit(); 
     lcdchar(); 
    } 
     

/********************************************************************* 

*晶振选择及时钟初始化函数 
**********************************************************************/ 
void os_init() 

    int i = 0; 
    SFRPAGE   = CONFIG_PAGE; 
    OSCXCN    = 0x67; 
    for (i = 0; i < 3000; i++);                   // 等待外部晶振稳定 
    while ((OSCXCN & 0x80) == 0); 
    CLKSEL    = 0x01;                              //选择系统时钟频率 


/********************************************************************* 

*12位ADC初始化 
**********************************************************************/ 
void adc_init() 

    SFRPAGE   = ADC0_PAGE; 
    REF0CN    = 0x00;                             //0x03 
     
    ADC0CN    = 0x80;                            //向AD0BUSY写1启动转换 


/********************************************************************* 

*ADC中断函数 
*********************************************************************/ 
void adc_isr () interrupt 15 

   if(AD0INT==1) 
    {l=ADC0L; 
     h=ADC0H; 
  
     } 
     SFRPAGE   = ADC0_PAGE; 
      AD0INT=0; 


void port_init() 

    SFRPAGE   = CONFIG_PAGE; 
       P0MDOUT=0xff; 
    XBR0      = 0x06; 
    XBR2      = 0x40; 


void spi_init() 

      SFRPAGE   = SPI0_PAGE; 
      SPI0CFG   = 0x40; 
      SPI0CN    = 0x01; 
      SPI0CKR   = 0x6D; 






 void delay1us(void) 
    { 
    uchar xdata i; 
    for(i=10;i>0;i--); 
    }  

void writelcd(uchar spi_data)       //向LV595写数据以SPI方式 

  uint xdata i,j,k; 
     for(i=0;i<9;i++); 
    LcdCs=0; 
    delay1us();     
    SPI_BUSY=1; 
    SFRPAGE   = SPI0_PAGE; 
    SPI0DAT=spi_data; 
    for(j=0;j<500;j++) 
        { 
       if(!SPI_BUSY)break; 
        }  
    delay1us(); 
     
    LcdCs=1; 
    delay1us(); 
    delay1us(); 
    delay1us(); 
    delay1us(); 
    delay1us(); 
    delay1us(); 
    for(k=0;k<5000;k++); 
     


void writecode(uchar ins)                    //向液晶控制模块写命令 
     { 
      uchar xdata t; 
      uint xdata j; 
     
      for(j=0;j<500;j++);     
      virt_port|=ins&0xf0;                    //取高字节向1602写数据  
      writelcd(virt_port);                    //先写高4位后再写低4位 这是在选择四个数据线的时候 
      
      virt_port|=0x08;                           
      writelcd(virt_port);                    //使能E脚为高电平 
      virt_port&=~0x08;                     
      writelcd(virt_port);                    //使能E脚为低电平 

      t=ins<<4;              
      virt_port|=t&0xf0;                      //取低字节向1602写数据 
      writelcd(virt_port); 
      virt_port|=0x08;                        //使能E脚为高电平 
      writelcd(virt_port); 
      virt_port&=~0x08;                        //使能E脚为低电平 
      writelcd(virt_port); 
      virt_port=0; 
      writelcd(virt_port); 
     } 

void writedata(uchar d)                       //写数据到1602 
     { 
      uchar xdata i,t; 
      uint xdata j; 
       
      for(j=0;j<500;j++);         
      virt_port|=0x02;                       //光标返回指令 
      writelcd(virt_port); 
      virt_port|=d&0xf0;                   //取高字节数据给数据寄存器 
      writelcd(virt_port); 
      virt_port|=0x08;                     //使能E脚为高电平 
      writelcd(virt_port); 
      virt_port&=0xf7;                     //使能E脚为低电平 
      writelcd(virt_port); 
      virt_port&=0x07;                       //设置光标右移,文字也右移 
      writelcd(virt_port); 
            
      t=d&0x0f; 
      virt_port|=t<<4;                       //取低字节数据给数据寄存器 
      writelcd(virt_port); 

      virt_port|=0x08;                     //使能E脚为高电平 
      writelcd(virt_port); 
      for(i=3;i>0;i--);  
      virt_port&=0xf7;                     //使能E脚为低电平 
      writelcd(virt_port); 
      virt_port=0;                           //数据清零 
      writelcd(virt_port); 
    } 

 void lcdchar (void) 
     { 
      
      uchar a,b,c,d; 
     h=h<<8; 
     temp=h+l; 
      temp=temp*250; 
        temp=temp/4096; 
       a=temp/1000;d=temp%1000;     
    if(a!=0) 
    { 
     writedata(tab1[a]);                  //除100 
     } 
     b=d/100;d=d%100; 
      
     writedata(tab1[b]); 
      writedata(tab1[10]); 
      c=d/10; d=d%10; 
     
     writedata(tab1[c]); 
     
     writedata(tab1[d]); 
     writedata(tab1[11]);                                    
   
    
     } 


void lcdinit() 

     uint xdata i; 
     
      virt_port=0x00; 
      writelcd(virt_port);         //RS脚为零写指令寄存器     RW为低电平 
      virt_port|=0x08;              //使能脚E=1 
      writelcd(virt_port); 
       virt_port&=0xf7;             //使E=0使能脚发生跳变高--低 
      writelcd(virt_port); 
      for(i=1000;i>0;i--);         //3次延时,重要! 
      for(i=8000;i>0;i--);         //用延时代替查询       

     
      virt_port=0;                 //写入20码,设置为4位总线方式,非常重要!!!!! 
      writelcd(virt_port); 
      virt_port|=0x20;             //只写高字节 
      writelcd(virt_port); 
      virt_port|=0x08;           //E=1 
      writelcd(virt_port); 
      for(i=20;i>0;i--);         //使命令执行 
      virt_port&=0xf7;           //E=0 
      writelcd(virt_port); 
      for(i=10;i>0;i--); 
      virt_port=0; 
      writelcd(virt_port); 
      
      

      writecode(0x38);            //设两行显示,4线方式5*10字符显示 
      for(i=50;i>0;i--); 
        writecode(0x06);            //光标右移 
      for(i=50;i>0;i--); 
      
       
      writecode(0x0c);            //开显示指令 
      for(i=50;i>0;i--); 
       
      
      writecode(0x02);            //光标返回指令 
      for(i=50;i>0;i--); 
        
     
      
      writecode(0x01);            //清屏指令 
      for(i=50;i>0;i--); 


void spi_srs  () interrupt 6 

    if(SPIF)         
        { 
      SFRPAGE   = SPI0_PAGE; 
      SPIF=0; 

        SPI_BUSY=0; 
        } 
         

    if(WCOL) 
        { 
       SFRPAGE   = SPI0_PAGE; 
        WCOL=0; 
        } 

}


 

 

/*---------------------------------------------------------------------------
;
;
;
;
;  FILE NAME   : C8051F040.H
;  TARGET MCUs : C8051F040, 'F041, 'F042, 'F043
;  DESCRIPTION : Register/bit definitions for the C8051F04x product family.
;
;  REVISION 1.2
; CHANGES from Rev. 1.1: Properly labLED sbit def's for CAN0STA
;
;---------------------------------------------------------------------------*/

/*  BYTE Registers  */
sfr P0       = 0x80;    /* PORT 0                                       */
sfr SP       = 0x81;    /* STACK POINTER                                */
sfr DPL      = 0x82;    /* DATA POINTER - LOW BYTE                      */
sfr DPH      = 0x83;    /* DATA POINTER - HIGH BYTE                     */
sfr SFRPAGE  = 0x84;    /* SFR PAGE SELECT                              */
sfr SFRNEXT  = 0x85;    /* SFR STACK NEXT PAGE                          */
sfr SFRLAST  = 0x86;    /* SFR STACK LAST PAGE                          */
sfr PCON     = 0x87;    /* POWER CONTROL                                */
sfr TCON     = 0x88;    /* TIMER CONTROL                                */
sfr CPT0CN   = 0x88;    /* COMPARATOR 0 CONTROL                         */
sfr CPT1CN   = 0x88;    /* COMPARATOR 1 CONTROL                         */
sfr CPT2CN   = 0x88;    /* COMPARATOR 2 CONTROL                         */
sfr TMOD     = 0x89;    /* TIMER MODE                                   */
sfr CPT0MD   = 0x89;    /* COMPARATOR 0 MODE                            */
sfr CPT1MD   = 0x89;    /* COMPARATOR 1 MODE                            */
sfr CPT2MD   = 0x89;    /* COMPARATOR 2 MODE                            */
sfr TL0      = 0x8A;    /* TIMER 0 - LOW BYTE                           */
sfr OSCICN   = 0x8A;    /* INTERNAL OSCILLATOR CONTROL                  */
sfr TL1      = 0x8B;    /* TIMER 1 - LOW BYTE                           */
sfr OSCICL   = 0x8B;    /* INTERNAL OSCILLATOR CALIBRATION              */
sfr TH0      = 0x8C;    /* TIMER 0 - HIGH BYTE                          */
sfr OSCXCN   = 0x8C;    /* EXTERNAL OSCILLATOR CONTROL                  */
sfr TH1      = 0x8D;    /* TIMER 1 - HIGH BYTE                          */
sfr CKCON    = 0x8E;    /* TIMER 0/1 CLOCK CONTROL                      */
sfr PSCTL    = 0x8F;    /* FLASH WRITE/ERASE CONTROL                    */
sfr P1       = 0x90;    /* PORT 1                                       */
sfr SSTA0    = 0x91;    /* UART 0 STATUS                                */
sfr SFRPGCN  = 0x96;    /* SFR PAGE CONTROL                             */
sfr CLKSEL   = 0x97;    /* SYSTEM CLOCK SELECT                          */
sfr SCON0    = 0x98;    /* UART 0 CONTROL                               */
sfr SCON1    = 0x98;    /* UART 1 CONTROL                               */
sfr SBUF0    = 0x99;    /* UART 0 BUFFER                                */
sfr SBUF1    = 0x99;    /* UART 1 BUFFER                                */
sfr SPI0CFG  = 0x9A;    /* SPI 0 CONFIGURATION                          */
sfr SPI0DAT  = 0x9B;    /* SPI 0 DATA                                   */
sfr P4MDOUT  = 0x9C;    /* PORT 4 OUTPUT MODE                           */
sfr SPI0CKR  = 0x9D;    /* SPI 0 CLOCK RATE CONTROL                     */
sfr P5MDOUT  = 0x9D;    /* PORT 5 OUTPUT MODE                           */
sfr P6MDOUT  = 0x9E;    /* PORT 6 OUTPUT MODE                           */
sfr P7MDOUT  = 0x9F;    /* PORT 7 OUTPUT MODE                           */
sfr P2       = 0xA0;    /* PORT 2                                       */
sfr EMI0TC   = 0xA1;    /* EMIF TIMING CONTROL                          */
sfr EMI0CN   = 0xA2;    /* EMIF CONTROL                                 */
sfr EMI0CF   = 0xA3;    /* EMIF CONFIGURATION                           */
sfr P0MDOUT  = 0xA4;    /* PORT 0 OUTPUT MODE                           */
sfr P1MDOUT  = 0xA5;    /* PORT 1 OUTPUT MODE                           */
sfr P2MDOUT  = 0xA6;    /* PORT 2 OUTPUT MODE CONFIGURATION             */
sfr P3MDOUT  = 0xA7;    /* PORT 3 OUTPUT MODE CONFIGURATION             */
sfr IE       = 0xA8;    /* INTERRUPT ENABLE                             */
sfr SADDR0   = 0xA9;    /* UART 0 SLAVE ADDRESS                         */
sfr SADDR1   = 0xA9;    /* UART 1 SLAVE ADDRESS                         */
sfr P1MDIN   = 0xAD;    /* PORT 1 INPUT MODE                            */
sfr P2MDIN   = 0xAE;    /* PORT 2 INPUT MODE                            */
sfr P3MDIN   = 0xAF;    /* PORT 3 INPUT MODE                            */
sfr P3       = 0xB0;    /* PORT 3                                       */
sfr FLSCL    = 0xB7;    /* FLASH TIMING PRESCALAR                       */
sfr FLACL    = 0xB7;    /* FLASH ACCESS LIMIT                           */
sfr IP       = 0xB8;    /* INTERRUPT PRIORITY                           */
sfr SADEN0   = 0xB9;    /* UART 0 SLAVE ADDRESS MASK                    */
sfr AMX2CF   = 0xBA;    /* ADC 2 MUX CONFIGURATION                      */
sfr AMX0PRT  = 0xBD;    /* ADC 0 MUX PORT PIN SELECT REGISTER           */
sfr AMX0CF   = 0xBA;    /* ADC 0 CONFIGURATION REGISTER                 */
sfr AMX0SL   = 0xBB;    /* ADC 0 AND ADC 1 MODE SELECTION               */
sfr AMX2SL   = 0xBB;    /* ADC 2 MUX CHANNEL SELECTION                  */
sfr ADC0CF   = 0xBC;    /* ADC 0 CONFIGURATION                          */
sfr ADC2CF   = 0xBC;    /* ADC 2 CONFIGURATION                          */
sfr ADC0L    = 0xBE;    /* ADC 0 DATA - LOW BYTE                        */
sfr ADC2     = 0xBE;    /* ADC 2 DATA - LOW BYTE                        */
sfr ADC0H    = 0xBF;    /* ADC 0 DATA - HIGH BYTE                       */
sfr SMB0CN   = 0xC0;    /* SMBUS 0 CONTROL                              */
sfr CAN0STA  = 0xC0;    /* CAN 0 STATUS                                 */
sfr SMB0STA  = 0xC1;    /* SMBUS 0 STATUS                               */
sfr SMB0DAT  = 0xC2;    /* SMBUS 0 DATA                                 */
sfr SMB0ADR  = 0xC3;    /* SMBUS 0 SLAVE ADDRESS                        */
sfr ADC0GTL  = 0xC4;    /* ADC 0 GREATER-THAN REGISTER - LOW BYTE       */
sfr ADC2GT   = 0xC4;    /* ADC 2 GREATER-THAN REGISTER - LOW BYTE       */
sfr ADC0GTH  = 0xC5;    /* ADC 0 GREATER-THAN REGISTER - HIGH BYTE      */
sfr ADC0LTL  = 0xC6;    /* ADC 0 LESS-THAN REGISTER - LOW BYTE          */
sfr ADC2LT   = 0xC6;    /* ADC 2 LESS-THAN REGISTER - LOW BYTE          */
sfr ADC0LTH  = 0xC7;    /* ADC 0 LESS-THAN REGISTER - HIGH BYTE         */
sfr TMR2CN   = 0xC8;    /* TIMER 2 CONTROL                              */
sfr TMR3CN   = 0xC8;    /* TIMER 3 CONTROL                              */
sfr TMR4CN   = 0xC8;    /* TIMER 4 CONTROL                              */
sfr P4       = 0xC8;    /* PORT 4                                       */
sfr TMR2CF   = 0xC9;    /* TIMER 2 CONFIGURATION                        */
sfr TMR3CF   = 0xC9;    /* TIMER 3 CONFIGURATION                        */
sfr TMR4CF   = 0xC9;    /* TIMER 4 CONFIGURATION                        */
sfr RCAP2L   = 0xCA;    /* TIMER 2 CAPTURE REGISTER - LOW BYTE          */
sfr RCAP3L   = 0xCA;    /* TIMER 3 CAPTURE REGISTER - LOW BYTE          */
sfr RCAP4L   = 0xCA;    /* TIMER 4 CAPTURE REGISTER - LOW BYTE          */
sfr RCAP2H   = 0xCB;    /* TIMER 2 CAPTURE REGISTER - HIGH BYTE         */
sfr RCAP3H   = 0xCB;    /* TIMER 3 CAPTURE REGISTER - HIGH BYTE         */
sfr RCAP4H   = 0xCB;    /* TIMER 4 CAPTURE REGISTER - HIGH BYTE         */
sfr TMR2L    = 0xCC;    /* TIMER 2 - LOW BYTE                           */
sfr TMR3L    = 0xCC;    /* TIMER 3 - LOW BYTE                           */
sfr TMR4L    = 0xCC;    /* TIMER 4 - LOW BYTE                           */
sfr TMR2H    = 0xCD;    /* TIMER 2 - HIGH BYTE                          */
sfr TMR3H    = 0xCD;    /* TIMER 3 - HIGH BYTE                          */
sfr TMR4H    = 0xCD;    /* TIMER 4 - HIGH BYTE                          */
sfr SMB0CR   = 0xCF;    /* SMBUS 0 CLOCK RATE                           */
sfr PSW      = 0xD0;    /* PROGRAM STATUS WORD                          */
sfr REF0CN   = 0xD1;    /* VOLTAGE REFERENCE 0 CONTROL                  */
sfr DAC0L    = 0xD2;    /* DAC 0 REGISTER - LOW BYTE                    */
sfr DAC1L    = 0xD2;    /* DAC 1 REGISTER - LOW BYTE                    */
sfr DAC0H    = 0xD3;    /* DAC 0 REGISTER - HIGH BYTE                   */
sfr DAC1H    = 0xD3;    /* DAC 1 REGISTER - HIGH BYTE                   */
sfr DAC0CN   = 0xD4;    /* DAC 0 CONTROL                                */
sfr DAC1CN   = 0xD4;    /* DAC 1 CONTROL                                */
sfr HVA0CN   = 0xD6;    /* HVDA CONTROL REGISTER                        */
sfr PCA0CN   = 0xD8;    /* PCA 0 COUNTER CONTROL                        */
sfr CAN0DATL = 0xD8;    /* CAN 0 DATA - LOW BYTE                        */
sfr P5       = 0xD8;    /* PORT 5                                       */
sfr PCA0MD   = 0xD9;    /* PCA 0 COUNTER MODE                           */
sfr CAN0DATH = 0xD9;    /* CAN 0 DATA - HIGH BYTE                       */
sfr PCA0CPM0 = 0xDA;    /* PCA 0 MODULE 0 CONTROL                       */
sfr CAN0ADR  = 0xDA;    /* CAN 0 ADDRESS                                */
sfr PCA0CPM1 = 0xDB;    /* PCA 0 MODULE 1 CONTROL                       */
sfr CAN0TST  = 0xDB;    /* CAN 0 TEST                                   */
sfr PCA0CPM2 = 0xDC;    /* PCA 0 MODULE 2 CONTROL                       */
sfr PCA0CPM3 = 0xDD;    /* PCA 0 MODULE 3 CONTROL                       */
sfr PCA0CPM4 = 0xDE;    /* PCA 0 MODULE 4 CONTROL                       */
sfr PCA0CPM5 = 0xDF;    /* PCA 0 MODULE 5 CONTROL                       */
sfr ACC      = 0xE0;    /* ACCUMULATOR                                  */
sfr PCA0CPL5 = 0xE1;    /* PCA 0 MODULE 5 CAPTURE/COMPARE - LOW BYTE    */
sfr XBR0     = 0xE1;    /* CROSSBAR CONFIGURATION REGISTER 0            */
sfr PCA0CPH5 = 0xE2;    /* PCA 0 MODULE 5 CAPTURE/COMPARE - HIGH BYTE   */
sfr XBR1     = 0xE2;    /* CROSSBAR CONFIGURATION REGISTER 1            */
sfr XBR2     = 0xE3;    /* CROSSBAR CONFIGURATION REGISTER 2            */
sfr XBR3     = 0xE4;    /* CROSSBAR CONFIGURATION REGISTER 3            */
sfr EIE1     = 0xE6;    /* EXTERNAL INTERRUPT ENABLE 1                  */
sfr EIE2     = 0xE7;    /* EXTERNAL INTERRUPT ENABLE 2                  */
sfr ADC0CN   = 0xE8;    /* ADC 0 CONTROL                                */
sfr ADC2CN   = 0xE8;    /* ADC 2 CONTROL                                */
sfr P6       = 0xE8;    /* PORT 6                                       */
sfr PCA0CPL2 = 0xE9;    /* PCA 0 MODULE 2 CAPTURE/COMPARE - LOW BYTE    */
sfr PCA0CPH2 = 0xEA;    /* PCA 0 MODULE 2 CAPTURE/COMPARE - HIGH BYTE   */
sfr PCA0CPL3 = 0xEB;    /* PCA 0 MODULE 3 CAPTURE/COMPARE - LOW BYTE    */
sfr PCA0CPH3 = 0xEC;    /* PCA 0 MODULE 3 CAPTURE/COMPARE - HIGH BYTE   */
sfr PCA0CPL4 = 0xED;    /* PCA 0 MODULE 4 CAPTURE/COMPARE - LOW BYTE    */
sfr PCA0CPH4 = 0xEE;    /* PCA 0 MODULE 4 CAPTURE/COMPARE - HIGH BYTE   */
sfr RSTSRC   = 0xEF;    /* RESET SOURCE                                 */
sfr B        = 0xF0;    /* B REGISTER                                   */
sfr EIP1     = 0xF6;    /* EXTERNAL INTERRUPT PRIORITY REGISTER 1       */
sfr EIP2     = 0xF7;    /* EXTERNAL INTERRUPT PRIORITY REGISTER 2       */
sfr SPI0CN   = 0xF8;    /* SPI 0 CONTROL                                */
sfr CAN0CN   = 0xF8;    /* CAN 0 CONTROL                                */
sfr P7       = 0xF8;    /* PORT 7                                       */
sfr PCA0L    = 0xF9;    /* PCA 0 TIMER - LOW BYTE                       */
sfr PCA0H    = 0xFA;    /* PCA 0 TIMER - HIGH BYTE                      */
sfr PCA0CPL0 = 0xFB;    /* PCA 0 MODULE 0 CAPTURE/COMPARE - LOW BYTE    */
sfr PCA0CPH0 = 0xFC;    /* PCA 0 MODULE 0 CAPTURE/COMPARE - HIGH BYTE   */
sfr PCA0CPL1 = 0xFD;    /* PCA 0 MODULE 1 CAPTURE/COMPARE - LOW BYTE    */
sfr PCA0CPH1 = 0xFE;    /* PCA 0 MODULE 1 CAPTURE/COMPARE - HIGH BYTE   */
sfr WDTCN    = 0xFF;    /* WATCHDOG TIMER CONTROL                       */


/*  BIT Registers  */

/*  TCON  0x88 */
sbit TF1   = TCON ^ 7;              /* TIMER 1 OVERFLOW FLAG      */
sbit TR1   = TCON ^ 6;              /* TIMER 1 ON/OFF CONTROL     */
sbit TF0   = TCON ^ 5;              /* TIMER 0 OVERFLOW FLAG      */
sbit TR0   = TCON ^ 4;              /* TIMER 0 ON/OFF CONTROL     */
sbit IE1   = TCON ^ 3;              /* EXT. INTERRUPT 1 EDGE FLAG */
sbit IT1   = TCON ^ 2;              /* EXT. INTERRUPT 1 TYPE      */
sbit IE0   = TCON ^ 1;              /* EXT. INTERRUPT 0 EDGE FLAG */
sbit IT0   = TCON ^ 0;              /* EXT. INTERRUPT 0 TYPE      */

/*  CPT0CN  0x88 */
sbit CP0EN   = CPT0CN ^ 7;          /* COMPARATOR 0 ENABLE                 */
sbit CP0OUT  = CPT0CN ^ 6;          /* COMPARATOR 0 OUTPUT                 */
sbit CP0RIF  = CPT0CN ^ 5;          /* COMPARATOR 0 RISING EDGE INTERRUPT  */
sbit CP0FIF  = CPT0CN ^ 4;          /* COMPARATOR 0 FALLING EDGE INTERRUPT */
sbit CP0HYP1 = CPT0CN ^ 3;          /* COMPARATOR 0 POSITIVE HYSTERESIS 1  */
sbit CP0HYP0 = CPT0CN ^ 2;          /* COMPARATOR 0 POSITIVE HYSTERESIS 0  */
sbit CP0HYN1 = CPT0CN ^ 1;          /* COMPARATOR 0 NEGATIVE HYSTERESIS 1  */
sbit CP0HYN0 = CPT0CN ^ 0;          /* COMPARATOR 0 NEGATIVE HYSTERESIS 0  */

/*  CPT1CN  0x88 */
sbit CP1EN   = CPT1CN ^ 7;          /* COMPARATOR 1 ENABLE                 */
sbit CP1OUT  = CPT1CN ^ 6;          /* COMPARATOR 1 OUTPUT                 */
sbit CP1RIF  = CPT1CN ^ 5;          /* COMPARATOR 1 RISING EDGE INTERRUPT  */
sbit CP1FIF  = CPT1CN ^ 4;          /* COMPARATOR 1 FALLING EDGE INTERRUPT */
sbit CP1HYP1 = CPT1CN ^ 3;          /* COMPARATOR 1 POSITIVE HYSTERESIS 1  */
sbit CP1HYP0 = CPT1CN ^ 2;          /* COMPARATOR 1 POSITIVE HYSTERESIS 0  */
sbit CP1HYN1 = CPT1CN ^ 1;          /* COMPARATOR 1 NEGATIVE HYSTERESIS 1  */
sbit CP1HYN0 = CPT1CN ^ 0;          /* COMPARATOR 1 NEGATIVE HYSTERESIS 0  */

/*  CPT2CN  0x88 */
sbit CP2EN   = CPT2CN ^ 7;          /* COMPARATOR 2 ENABLE                 */
sbit CP2OUT  = CPT2CN ^ 6;          /* COMPARATOR 2 OUTPUT                 */
sbit CP2RIF  = CPT2CN ^ 5;          /* COMPARATOR 2 RISING EDGE INTERRUPT  */
sbit CP2FIF  = CPT2CN ^ 4;          /* COMPARATOR 2 FALLING EDGE INTERRUPT */
sbit CP2HYP1 = CPT2CN ^ 3;          /* COMPARATOR 2 POSITIVE HYSTERESIS 1  */
sbit CP2HYP0 = CPT2CN ^ 2;          /* COMPARATOR 2 POSITIVE HYSTERESIS 0  */
sbit CP2HYN1 = CPT2CN ^ 1;          /* COMPARATOR 2 NEGATIVE HYSTERESIS 1  */
sbit CP2HYN0 = CPT2CN ^ 0;          /* COMPARATOR 2 NEGATIVE HYSTERESIS 0  */

/*  SCON0  0x98 */
sbit SM00 = SCON0 ^ 7;              /* UART 0 MODE 0            */
sbit SM10 = SCON0 ^ 6;              /* UART 0 MODE 1            */
sbit SM20 = SCON0 ^ 5;              /* UART 0 MCE               */
sbit REN0 = SCON0 ^ 4;              /* UART 0 RX ENABLE         */
sbit TB80 = SCON0 ^ 3;              /* UART 0 TX BIT 8          */
sbit RB80 = SCON0 ^ 2;              /* UART 0 RX BIT 8          */
sbit TI0  = SCON0 ^ 1;              /* UART 0 TX INTERRUPT FLAG */
sbit RI0  = SCON0 ^ 0;              /* UART 0 RX INTERRUPT FLAG */

/*  SCON1  0x98 */
sbit S0MODE = SCON1 ^ 7;            /* UART 1 MODE              */
sbit MCE1   = SCON1 ^ 5;            /* UART 1 MCE               */
sbit REN1   = SCON1 ^ 4;            /* UART 1 RX ENABLE         */
sbit TB81   = SCON1 ^ 3;            /* UART 1 TX BIT 8          */
sbit RB81   = SCON1 ^ 2;            /* UART 1 RX BIT 8          */
sbit TI1    = SCON1 ^ 1;            /* UART 1 TX INTERRUPT FLAG */
sbit RI1    = SCON1 ^ 0;            /* UART 1 RX INTERRUPT FLAG */

/*  IE  0xA8 */
sbit EA    = IE ^ 7;                /* GLOBAL INTERRUPT ENABLE      */
sbit ET2   = IE ^ 5;                /* TIMER 2 INTERRUPT ENABLE     */
sbit ES0   = IE ^ 4;                /* UART0 INTERRUPT ENABLE       */
sbit ET1   = IE ^ 3;                /* TIMER 1 INTERRUPT ENABLE     */
sbit EX1   = IE ^ 2;                /* EXTERNAL INTERRUPT 1 ENABLE  */
sbit ET0   = IE ^ 1;                /* TIMER 0 INTERRUPT ENABLE     */
sbit EX0   = IE ^ 0;                /* EXTERNAL INTERRUPT 0 ENABLE  */

/*  IP  0xB8 */
sbit PT2   = IP ^ 5;                /* TIMER 2 PRIORITY     */
sbit PS    = IP ^ 4;                /* SERIAL PORT PRIORITY    */
sbit PT1   = IP ^ 3;                /* TIMER 1 PRIORITY     */
sbit PX1   = IP ^ 2;                /* EXTERNAL INTERRUPT 1 PRIORITY */
sbit PT0   = IP ^ 1;                /* TIMER 0 PRIORITY     */
sbit PX0   = IP ^ 0;                /* EXTERNAL INTERRUPT 0 PRIORITY */

/* SMB0CN 0xC0 */
sbit BUSY   = SMB0CN ^ 7;           /* SMBUS 0 BUSY                    */
sbit ENSMB  = SMB0CN ^ 6;           /* SMBUS 0 ENABLE                  */
sbit STA    = SMB0CN ^ 5;           /* SMBUS 0 START FLAG              */
sbit STO    = SMB0CN ^ 4;           /* SMBUS 0 STOP FLAG               */
sbit SI     = SMB0CN ^ 3;           /* SMBUS 0 INTERRUPT PENDING FLAG  */
sbit AA     = SMB0CN ^ 2;           /* SMBUS 0 ASSERT/ACKNOWLEDGE FLAG */
sbit SMBFTE = SMB0CN ^ 1;           /* SMBUS 0 FREE TIMER ENABLE       */
sbit SMBTOE = SMB0CN ^ 0;           /* SMBUS 0 TIMEOUT ENABLE          */

/* CAN0STA 0xC0 */
sbit BOFF   = CAN0STA ^ 7;          /* Bus Off Status                  */
sbit EWARN  = CAN0STA ^ 6;          /* Warning Status                  */
sbit EPASS  = CAN0STA ^ 5;          /* Error Passive                   */
sbit RXOK   = CAN0STA ^ 4;          /* Received Message Successfully   */
sbit TXOK   = CAN0STA ^ 3;          /* Transmit a Message Successfully */
sbit LEC2   = CAN0STA ^ 2;          /* Last error code bit 2           */
sbit LEC1   = CAN0STA ^ 1;          /* Last error code bit 1           */
sbit LEC0   = CAN0STA ^ 0;          /* Last error code bit            */

/*  TMR2CN  0xC8 */
sbit TF2   = TMR2CN ^ 7;            /* TIMER 2 OVERFLOW FLAG        */
sbit EXF2  = TMR2CN ^ 6;            /* TIMER 2 EXTERNAL FLAG        */
sbit EXEN2 = TMR2CN ^ 3;            /* TIMER 2 EXTERNAL ENABLE FLAG */
sbit TR2   = TMR2CN ^ 2;            /* TIMER 2 ON/OFF CONTROL       */
sbit CT2   = TMR2CN ^ 1;            /* TIMER 2 COUNTER SELECT       */
sbit CPRL2 = TMR2CN ^ 0;            /* TIMER 2 CAPTURE SELECT       */

/*  TMR3CN  0xC8 */
sbit TF3   = TMR3CN ^ 7;            /* TIMER 3 OVERFLOW FLAG        */
sbit EXF3  = TMR3CN ^ 6;            /* TIMER 3 EXTERNAL FLAG        */
sbit EXEN3 = TMR3CN ^ 3;            /* TIMER 3 EXTERNAL ENABLE FLAG */
sbit TR3   = TMR3CN ^ 2;            /* TIMER 3 ON/OFF CONTROL       */
sbit CT3   = TMR3CN ^ 1;            /* TIMER 3 COUNTER SELECT       */
sbit CPRL3 = TMR3CN ^ 0;            /* TIMER 3 CAPTURE SELECT       */

/*  TMR4CN  0xC8 */
sbit TF4   = TMR4CN ^ 7;            /* TIMER 4 OVERFLOW FLAG        */
sbit EXF4  = TMR4CN ^ 6;            /* TIMER 4 EXTERNAL FLAG        */
sbit EXEN4 = TMR4CN ^ 3;            /* TIMER 4 EXTERNAL ENABLE FLAG */
sbit TR4   = TMR4CN ^ 2;            /* TIMER 4 ON/OFF CONTROL       */
sbit CT4   = TMR4CN ^ 1;            /* TIMER 4 COUNTER SELECT       */
sbit CPRL4 = TMR4CN ^ 0;            /* TIMER 4 CAPTURE SELECT       */

/*  PSW 0xD0 */
sbit CY  = PSW ^ 7;                 /* CARRY FLAG              */
sbit AC  = PSW ^ 6;                 /* AUXILIARY CARRY FLAG    */
sbit F0  = PSW ^ 5;                 /* USER FLAG 0             */
sbit RS1 = PSW ^ 4;                 /* REGISTER BANK SELECT 1  */
sbit RS0 = PSW ^ 3;                 /* REGISTER BANK SELECT 0  */
sbit OV  = PSW ^ 2;                 /* OVERFLOW FLAG           */
sbit F1  = PSW ^ 1;                 /* USER FLAG 1             */
sbit P   = PSW ^ 0;                 /* ACCUMULATOR PARITY FLAG */

/* PCA0CN 0xD8 */
sbit CF   = PCA0CN ^ 7;             /* PCA 0 COUNTER OVERFLOW FLAG   */
sbit CR   = PCA0CN ^ 6;             /* PCA 0 COUNTER RUN CONTROL BIT */
sbit CCF5 = PCA0CN ^ 5;             /* PCA 0 MODULE 5 INTERRUPT FLAG */
sbit CCF4 = PCA0CN ^ 4;             /* PCA 0 MODULE 4 INTERRUPT FLAG */
sbit CCF3 = PCA0CN ^ 3;             /* PCA 0 MODULE 3 INTERRUPT FLAG */
sbit CCF2 = PCA0CN ^ 2;             /* PCA 0 MODULE 2 INTERRUPT FLAG */
sbit CCF1 = PCA0CN ^ 1;             /* PCA 0 MODULE 1 INTERRUPT FLAG */
sbit CCF0 = PCA0CN ^ 0;             /* PCA 0 MODULE 0 INTERRUPT FLAG */


/* ADC0CN 0xE8 */
sbit AD0EN   = ADC0CN ^ 7;          /* ADC 0 ENABLE                   */
sbit AD0TM   = ADC0CN ^ 6;          /* ADC 0 TRACK MODE               */
sbit AD0INT  = ADC0CN ^ 5;          /* ADC 0 EOC INTERRUPT FLAG       */
sbit AD0BUSY = ADC0CN ^ 4;          /* ADC 0 BUSY FLAG                */
sbit AD0CM1  = ADC0CN ^ 3;          /* ADC 0 CONVERT START MODE BIT 1 */
sbit AD0CM0  = ADC0CN ^ 2;          /* ADC 0 CONVERT START MODE BIT 0 */
sbit AD0WINT = ADC0CN ^ 1;          /* ADC 0 WINDOW INTERRUPT FLAG    */


/* ADC2CN 0xE8 */
sbit AD2EN   = ADC2CN ^ 7;          /* ADC 2 ENABLE                   */
sbit AD2TM   = ADC2CN ^ 6;          /* ADC 2 TRACK MODE               */
sbit AD2INT  = ADC2CN ^ 5;          /* ADC 2 EOC INTERRUPT FLAG       */
sbit AD2BUSY = ADC2CN ^ 4;          /* ADC 2 BUSY FLAG                */
sbit AD2WINT = ADC2CN ^ 3;          /* ADC 2 WINDOW INTERRUPT FLAG    */
sbit AD2CM2  = ADC2CN ^ 2;          /* ADC 2 CONVERT START MODE BIT 2 */
sbit AD2CM1  = ADC2CN ^ 1;          /* ADC 2 CONVERT START MODE BIT 1 */
sbit AD2CM0  = ADC2CN ^ 0;          /* ADC 2 CONVERT START MODE BIT 0 */

/* SPI0CN 0xF8 */
sbit SPIF   = SPI0CN ^ 7;           /* SPI 0 INTERRUPT FLAG          */
sbit WCOL   = SPI0CN ^ 6;           /* SPI 0 WRITE COLLISION FLAG    */
sbit MODF   = SPI0CN ^ 5;           /* SPI 0 MODE FAULT FLAG         */
sbit RXOVRN = SPI0CN ^ 4;           /* SPI 0 RX OVERRUN FLAG         */
sbit NSSMD1 = SPI0CN ^ 3;   /* SPI 0 SLAVE SELECT MODE BIT 1 */
sbit NSSMD0 = SPI0CN ^ 2;   /* SPI 0 SLAVE SELECT MODE BIT 0 */
sbit TXBMT  = SPI0CN ^ 1;           /* SPI 0 TX BUFFER EMPTY         */
sbit SPIEN  = SPI0CN ^ 0;           /* SPI 0 SPI ENABLE              */

/* CAN0CN 0xF8 */
sbit CANINIT = CAN0CN ^ 0;         /* CAN Initialization bit */
sbit CANIE   = CAN0CN ^ 1;         /* CAN Module Interrupt Enable Bit */
sbit CANSIE  = CAN0CN ^ 2;         /* CAN Status change Interrupt Enable Bit */
sbit CANEIE  = CAN0CN ^ 3;         /* CAN Module Error Interrupt Enable Bit */
sbit CANIF   = CAN0CN ^ 4;         /* CAN Module Interrupt Flag */
sbit CANDAR  = CAN0CN ^ 5;         /* CAN DISAble Automatic Retransmission bit */
sbit CANCCE  = CAN0CN ^ 6;         /* CAN Configuration Change Enable bit */
sbit CANTEST = CAN0CN ^ 7;         /* CAN Test Mode Enable bit */

 

/* SFR PAGE DEFINITIONS */
#define  CONFIG_PAGE       0x0F     /* SYSTEM AND PORT CONFIGURATION PAGE */
#define  LEGACY_PAGE       0x00     /* LEGACY SFR PAGE                    */
#define  TIMER01_PAGE      0x00     /* TIMER 0 AND TIMER 1                */
#define  CPT0_PAGE         0x01     /* COMPARATOR 0                       */
#define  CPT1_PAGE         0x02     /* COMPARATOR 1                       */
#define  CPT2_PAGE         0x03     /* COMPARATOR 2                       */
#define  UART0_PAGE        0x00     /* UART 0                             */
#define  UART1_PAGE        0x01     /* UART 1                             */
#define  SPI0_PAGE         0x00     /* SPI 0                              */
#define  EMI0_PAGE         0x00     /* EXTERNAL MEMORY INTERFACE          */
#define  ADC0_PAGE         0x00     /* ADC 0                              */
#define  ADC2_PAGE         0x02     /* ADC 2                              */
#define  SMB0_PAGE         0x00     /* SMBUS 0                            */
#define  TMR2_PAGE         0x00     /* TIMER 2                            */
#define  TMR3_PAGE         0x01     /* TIMER 3                            */
#define  TMR4_PAGE         0x02     /* TIMER 4                            */
#define  DAC0_PAGE         0x00     /* DAC 0                              */
#define  DAC1_PAGE         0x01     /* DAC 1                              */
#define  PCA0_PAGE         0x00     /* PCA 0                              */
#define  CAN0_PAGE         0x01     /* CAN 0                              */


关键字:c8051F040  液晶显示 引用地址:c8051F040液晶显示程序

上一篇:c8051f005单片机PWM测试程序
下一篇:c8051f005键盘测试程序

推荐阅读最新更新时间:2024-03-16 15:51

天思彩光电LED及传感器封装制造、三杰数码液晶显示模组生产等项目签约赣州
2月28日上午,江西省赣州经开区举行2022年第3批招商引资项目集中签约仪式,现场签约10个项目,签约金额达86亿元。 此次签约的项目包括东莞市沃泰通新能源有限公司新能源动力电池生产项目、达闼机器人有限公司云端智能农业机器人项目、深圳市天思彩光电科技有限公司LED及传感器封装制造项目、东莞市三杰数码科技有限公司液晶显示模组生产项目、东莞市勤正机械有限公司线缆机械设备生产项目、赣州西克节能自动化设备有限公司年产400套有色金属分离冶炼智能成套设备生产项目等。 其中,深圳市天思彩光电科技有限公司LED及传感器封装制造项目,总投资15亿元,主要从事LED户外显示屏像素管和LED照明灯具等LED产品的研发、生产和销售。项目达产达标后,可实
[手机便携]
2440裸机编程之九 LCD液晶显示
S3C2440A 内部含有一个LCD 驱动控制器.能自动产生LCD 驱动控制所需的控制信号,因此S3C2440A 可以与诸如黑白灰度、STN 型彩色、TFT 型彩色等LCD 屏直接接口,而不需要另外加LCD 控制器。在这种接口方式下,LCD 显示缓冲区映射在系统的存储器空间上(DMA),程序只需像素点内容写入存储器对应地址就可以实现对应LCD屏上像素点颜色的显示,十分方便。 这里以S3C2440A 与一个TFT 型640 像素×480 行的彩色液晶显示屏接口为例,介绍如何在LCD 上显示某种色彩及如何绘制简单图形等。 2440的LCD 驱动控制器如下: 要想正确使用LCD,必须注意两点:1、时序;2、显示缓存区。
[单片机]
2440裸机编程之九 LCD<font color='red'>液晶显示</font>器
液晶显示器偏光膜的基本原理
偏极光与偏光膜的基本原理     大多数的人仍然对偏光膜这个名词感到陌生而不很清楚,故在此先对偏极光的现象及基本原理稍做说明。 偏极光     人类对光的了解依序可分成以下四个重要阶段:     1.十七世纪中,牛顿首先开始对光做有系统的研究,他发现到所谓的白光(White Light)是由所有的色光(Colored Light)混合而成。为了要解释这个现象,就有许多不同的理论衍生出来。     2.十九世纪初,杨氏(Thomas Young)利用波动理论成功的解释了大部分的光学现象如反射、折射和绕射等。     3.1873年,马克斯威尔发现光波是电磁波,其中它的电波和磁波是相依相存不能分开的,电场(E)、磁场(H)与电磁
[嵌入式]
基于AVR单片机的VRAM型彩色液晶显示模块设计
1 引言 随着电子技术的飞速发展,越来越多的领域应用到以单片机为控制核心、用液晶作为显示终端的数字化设备。彩色液晶显示器作为当代高新技术的结晶产品,不但具有超薄平面、显示信息丰富、色彩逼真的特点,而且还具有体积小、耗电省、寿命长、无辐射、抗震、防爆等其他类型显示器无可比拟的优点,因而是工控仪表、机电设备等行业更新换代的理想显示器件。因此基于单片机系统的彩色液晶显示模块的使用也越来越广泛。本文介绍一种基于AVR单片机和硬件汉字库的彩色液晶显示模块,该模块实现了在彩色液晶显示器上显示不同颜色的中文、英文、数字及简单的画图功能。 2 液晶显示器显示原理 本模块采用的液晶显示器是河南友利华高科技有限公司生产的YD2502彩色液晶VR
[单片机]
基于AVR单片机的VRAM型彩色<font color='red'>液晶显示</font>模块设计
LCD1602液晶显示(51单片机c语言)
效果图: 电路图: #include reg52.h #include intrins.h //包含_nop_()函数定义的头文件 #define uchar unsigned char #define uint unsigned int sbit RS=P2^5; //寄存器选择位 sbit RW=P2^6; //读写选择位 sbit E=P2^7; //使能信号位 //sbit BF=P0^7; //忙碌标志位 const uchar string1 ={ mazirong }; const uchar string2 ={ TEL:13297961386 }; /**************************
[单片机]
LCD1602<font color='red'>液晶显示</font>(51单片机c语言)
基于C8051F040的CAN总线智能节点设计
引言 “X型火控系统”根据实际需要采用了CAN总线方式来实现其内部单体间的通信。CAN总线是一种用于各种设备检测及控制的现场总线,它是一种多主总线,在高速网络和低成本的节点系统中应用都很广泛。CAN总线与一般的通信总线相比,它的数据通信具有突出的可靠性、实时性和灵活性。其特点如下: *可以多主方式工作。 *CAN节点只需对报文的标识符滤波即可实现点对点、一点对多点及全局广播方式发送和接收数据。 *CAN总线通信格式采用短帧格式。 *采用非破坏性总线仲裁技术。 *直接通信距离最大可达10km (速率5kb/s以下),最高通信速率可达1Mb/s (此时距离最长为40m),节点数可达110个,通信介质可以是双绞线、同轴电缆或光导纤维。
[工业控制]
图形点阵式液晶显示模块与51单片机的接口设计
引 言 液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。以往的测控仪器的显示部分大都采用LED式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。本文在介绍以ST7920为驱动器的WGM-12832液晶显示模块的引脚、结构、功能的基础上,详述了与AT
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved