您当前的位置:五五电子网电子知识单片机-工控设备51单片机c8051F040液晶显示程序 正文
c8051F040液晶显示程序

c8051F040液晶显示程序

点击数:7507 次   录入时间:03-04 11:49:50   整理:http://www.55dianzi.com   51单片机

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写数据 

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]  下一页


本文关键字:程序  51单片机单片机-工控设备 - 51单片机