⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcddisplay.c

📁 Lcd(12864).rar
💻 C
字号:


#include <c8051f020.h>                 // SFR declarations
#include <intrins.h>
#include <stdio.h>

#define uchar unsigned char          
#define uint  unsigned int 

#define Lcd_Bus    P5

#define SYSCLK       22118400          // SYSCLK frequency in Hz
#define INT_DEC      256               // integrate and decimate ratio
#define _Nop() _nop_()
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F02x
//-----------------------------------------------------------------------------

sfr16 DP       = 0x82;                 // data pointer
sfr16 TMR3RL   = 0x92;                 // Timer3 reload value
sfr16 TMR3     = 0x94;                 // Timer3 counter
sfr16 ADC0     = 0xbe;                 // ADC0 data
sfr16 ADC0GT   = 0xc4;                 // ADC0 greater than window
sfr16 ADC0LT   = 0xc6;                 // ADC0 less than window
sfr16 RCAP2    = 0xca;                 // Timer2 capture/reload
sfr16 T2       = 0xcc;                 // Timer2
sfr16 RCAP4    = 0xe4;                 // Timer4 capture/reload
sfr16 T4       = 0xf4;                 // Timer4
sfr16 DAC0     = 0xd2;                 // DAC0 data
sfr16 DAC1     = 0xd5;                 // DAC1 data
//-----------------------------------------------------------------------------
// 液晶接口定义
//-----------------------------------------------------------------------------
//sbit RS=P3^0; 
//sbit RW=P3^1;
//sbit E =P3^2;
//sbit RS=P6^7 
//sbit RW=P6^6;
//sbit E =P6^5;
//sbit PSB =P6^4;//高电平
//sbit RST =P6^2;//高电平

#define LCDRSLow  P6&=~0x80;
#define LCDRSHigh P6|=0x80;

#define LCDRWLow  P6&=~0x40;
#define LCDRWHigh P6|=0x40;

#define LCDELow  P6&=~0x20;
#define LCDEHigh P6|=0x20;

#define LCDPSBLow  P6&=~0x10;
#define LCDPSBHigh P6|=0x10;

#define LCDRSTLow  P6&=~0x04;
#define LCDRSTHigh P6|=0x04;


//==============================//
uchar num;
uint delay_time;
/*-----------------------------------------------------*/

void SYSCLK_Init (void);
void PORT_Init (void);


//-----------------------------------------------------------------------------
// 
//-----------------------------------------------------------------------------


void delay(unsigned int t)
{    unsigned int k,j;
     for(k=0;k<t;k++)
     for(j=0;j<10;j++) ;
}
//-----------------------------------------------------------------------------
// 
//-----------------------------------------------------------------------------


void delay18(uint k)
{ while(k)
    { k--; }
}

//-----------------------------------------------------------------------------
// 液晶显示写命令
//-----------------------------------------------------------------------------
void write_com(unsigned char cmdcode)
{
	LCDRSLow;		    
	LCDRWLow;
	LCDEHigh;
	Lcd_Bus=cmdcode;
	delay(50);delay(60);                           //在数据写入的时候加入适当的延时
	LCDELow;
	delay(50);delay(60); 
}
//-----------------------------------------------------------------------------
// 液晶显示写数据
//-----------------------------------------------------------------------------
void write_data(unsigned char Dispdata)
{
	LCDRSHigh;
	LCDRWLow;
	LCDEHigh;
	Lcd_Bus=Dispdata;
	delay(50);delay(60);                            // 在数据写入的时候加入适当的延时
	LCDELow;
	delay(50);delay(60); 
}
//-----------------------------------------------------------------------------
// 液晶显示,复位初始
//-----------------------------------------------------------------------------
void lcdreset()
{
     delay(200);delay(250); 
     write_com(0x30);
     delay(100);delay(250);                           //选择基本指令集
     write_com(0x30);                     //选择8bit数据流
     delay(50);delay(250);
     write_com(0x0c);                     //开显示(无游标、不反白)
     delay(50);delay(250);
     write_com(0x01);                       //清除显示,并且设定地址指针为00H
     delay(50);delay(250);
     write_com(0x06);                      //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位

}
//-----------------------------------------------------------------------------
// 液晶显示
//-----------------------------------------------------------------------------
void display(unsigned char code *s)
{
      while(*s>0)
      {  write_data(*s);
         s++;
         delay(50);delay(100);
      }
}
//-----------------------------------------------------------------------------
// 液晶显示内容
//-----------------------------------------------------------------------------

void zero_screen()
{
  write_com(0x01);
  delay18(10000);
  //write_com(0x80);
  //display("  浙江师范大学  ");
  write_com(0x90);
  //display("省单片机精品课程");
  display("C8051F020 开发板");
  write_com(0x88);
  //display("C8051F020 开发板");
  display("  QQ:45248052  ");
  //write_com(0x98);
  //display("  QQ:45248052  ");
}
//-----------------------------------------------------------------------------
// 通用I/O口及交叉开关初始化
//-----------------------------------------------------------------------------
void PORT_Init (void)
{            
  XBR0 = 0x02; 				// 通过交叉开关将SPI连到通用I/O 引脚;P0.0,P0.1,P0.2 , P0.3
  XBR2     = 0x40;               // 交叉开关使能   
        		
  //P3MDOUT  = 0xff;                // 设为推挽方式  AT24C02读取设置成推挽模式
  //P2MDOUT  = 0xff;       
 // P1MDOUT  = 0xff;  
  //P0MDOUT  = 0x00;				 //读取刷卡器信息设置成开漏模式

 // P0MDOUT=0x05;
 // P0|=0x80;
}
//-----------------------------------------------------------------------------
// 系统时钟初始化
//-----------------------------------------------------------------------------

/*
void SYSCLK_Init()
{   
  OSCICN =0x87; //使用内部时钟16M
  while((OSCICN & 0x10)==0);//内部时钟按设定频率运行
} 
*/
// 配置系统时钟使用外部晶振11.0592MHz

void SYSCLK_Init (void)
{
   int i;                              // delay counter

   OSCXCN = 0x67;                      // start external oscillator with
                                       // 22.1184MHz crystal
   for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)

   while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
}

//-----------------------------------------------------------------------------
// 系统初始化
//-----------------------------------------------------------------------------
void init()
{
   SYSCLK_Init();
   PORT_Init ();
   lcdreset();
   zero_screen();   
}
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------

void main()
{ 

  WDTCN = 0xde;
  WDTCN = 0xad;                //禁止看门狗定时器  

  LCDPSBHigh;
  LCDRSTHigh;	
  init(); 
  zero_screen();
  
   P6=0xff;
   P5=0xff;
  while(1)
  {     

  }
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -