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

📄 lcd.c

📁 51单片机与LCD接口的C语言驱动程序设计.
💻 C
📖 第 1 页 / 共 5 页
字号:
#include <reg52.h>
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>
#define TIMER0_COUNT 0xFE33 
#define uchar unsigned char
#define uint unsigned int
unsigned char count_min_1=0;
unsigned char count_min_2=0;
unsigned char count_hour_1=0;
unsigned char count_hour_2=0;
uchar KEY,timer0_tick=0;
uint a;
/********************引脚定义********************/
sbit    RS    =P2^5;      //数据指令
sbit    RW    =P2^6;      //读写
sbit    E     =P2^7;      //使能
sbit    CS1   =P2^3;      //左片选
sbit    CS2   =P2^4;      //中片选
sbit    RST   =P2^2;      //右片选

sbit    KEY_YES  =P2^0;      //YES
sbit    KEY_NO   =P2^1;      //NO
sbit    KEY_UP   =P3^4;      //UP
sbit    KEY_DOWN =P3^5;      //DOWN

unsigned char Page;       //页 地址
unsigned char Col;        //列 地址

unsigned char code BMP0[];             //启动界面
unsigned char code BMP1[];             //选择界面
unsigned char code BMP2[];             //帐户信息界面
unsigned char code BMP3[];             //公司联系方式
unsigned char code BMP4[];             //公司简介
unsigned char code BMP5[];             
unsigned char code Cursor[];             //光标
unsigned char code number_0[];
unsigned char code number_1[];
unsigned char code number_2[];
unsigned char code number_3[];
unsigned char code number_4[];
unsigned char code number_5[];
unsigned char code number_6[];
unsigned char code number_7[];
unsigned char code number_8[];
unsigned char code number_9[];
unsigned char code Company_Profile[];  /*--  文字:  公司简介  --*/
unsigned char code Information[];      /*--  文字:  信息查询  --*/
unsigned char code parameters[];       /*--  文字:  参数设置  --*/
unsigned char code Contact[];          /*--  文字:  联系方式  --*/
unsigned char code Symbol[];           /*--  文字:  :  --*/

unsigned char code DATE[];
unsigned char code TIME[];

void Delay(unsigned int MS);
void wtcom(void);
void time_display(void)
{

        if(timer0_tick==60)
        {
        	timer0_tick=0;
        	count_min_1+=1;
        	if(count_min_1==10)
        	{
        		count_min_1=0;
        		count_min_2+=1;
        		if(count_min_2==6)
        		{
        			count_min_2=0;
        			count_hour_1+=1;
        			if(count_hour_1==10)
        			{
        				count_hour_1=0;
        				count_hour_2+=1;
        				if(count_hour_2==2)count_hour_2=0;
        			}
        		}		
        	}	
        	
        }
}
/***************************************************
定时器服务程序
***************************************************/
static void timer0_isr(void) interrupt 1 using 0
{
  TR0=0;
  TL0=(TIMER0_COUNT&0x00FF);
  TH0=(TIMER0_COUNT>>8);
  TR0=1;
  timer0_tick++; 
}
/***************************************************
定时器初始化程序
***************************************************/
static void timer0_initialize(void)
{
  EA=0;
  timer0_tick=0;
  TR0=0;
  TMOD=0x01;
  TL0=(TIMER0_COUNT&0x00FF);
  TH0=(TIMER0_COUNT >> 8);
  PT0=0;
  ET0=1;
  TR0=1;
  EA=1;
}

/***************************/
/*检查Busy                 */
/***************************/
void BusyL(void)
{
 CS1= 0;
 CS2= 0;
 wtcom();
}

void BusyM(void)
{
 CS1= 0;
 CS2= 1;
 wtcom();
}

void BusyR(void)
{
 CS1= 1;
 CS2= 0;
 wtcom();
}
void wtcom(void)
{
 RS = 0;  //指令
 RW = 1;
 P0 = 0xFF; //输出0xff以便读取正确
 E  = 1;
 _nop_();
 while(P0&0x80); //Status Read Bit7 = BUSY
 E  = 0;
 _nop_();
}
/********************************************************/
/*根据设定的坐标数据,定位LCM上的下一个操作单元位置 */
/********************************************************/
void Locatexy(void)
{
 unsigned char x,y;
 switch (Col&0xc0) /*  col.and.0xC0 */
 {   /*条件分支执行  */
  case 0: {BusyL();break;}/*左区 */
  case 0x40: {BusyM();break;}/*中区 */
  case 0x80: {BusyR();break;}/*右区 */
 }
 x = Col&0x3F|0x40; /* col.and.0x3f.or.Set Y Address     相当于x = (Col&0x3F)|0x40;*/
 y = Page&0x07|0xB8; /* row.and.0x07.or.set Page */
 
 wtcom();  /* waitting for enable */
 RS = 0;   //指令
 RW = 0;   //写
 P0 = y;   //设置页面地址
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
 
 wtcom();  /*  waitting for enable */
 RS = 0;
 RW = 0;
 P0 = x;   //设置列地址
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
}

/***************************/
/*写指令                   */
/***************************/
void WriteCommandL( unsigned char CommandByte )
{
 BusyL();
 P0 = CommandByte;
 RS = 0;  //指令
 RW = 0;
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
}

void WriteCommandM( unsigned char CommandByte )
{
 BusyM();
 P0 = CommandByte;
 RS = 0;  //指令
 RW = 0;
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
}

void WriteCommandR( unsigned char CommandByte )
{
 BusyR();
 P0 = CommandByte;
 RS = 0;  //指令
 RW = 0;
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
}

/***************************/
/*读数据                   */
/***************************/
unsigned char ReadData( void )
{
 unsigned char DataByte;
 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
 RS = 1;  /*数据输出*/
 RW = 1;  /*读入  */
 P0 = 0xFF;  //输出0xff以便读取正确
 E  = 1;  /*读入到LCM*/
 _nop_();
 DataByte = P0; /*数据读出到数据口P1 */
 E  = 0;
 _nop_();
 return DataByte;
}

/***************************/
/*写数据                   */
/***************************/
void WriteData( unsigned char DataByte )
{
 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
 RS = 1;  /*数据输出*/
 RW = 0;  /*写输出  */
 P0 = DataByte; /*数据输出到数据口 */
 E  = 1;  /*写入到LCM*/
 _nop_();

⌨️ 快捷键说明

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