• 大小: 8KB
    文件类型: .c
    金币: 2
    下载: 0 次
    发布日期: 2024-02-01
  • 语言: 其他
  • 标签: LCD1602  

资源简介

//简介:第一行显示,距离系统爆炸时间 //第二行显示,还剩 //第三行显示,00时,00分,00秒 //第四行显示, 周林 //按下旋钮开关,开始设定秒,秒编辑位闪动。左右旋转设定数值, //在按下开关,秒确定,设定分,分编辑位闪动左右调数值, //再按下,分确定,小时位闪动。左右转调小时,再按一下。 //时间确定,开始倒计时。到达定时时间后停止,并闪动。

资源截图

代码片段和文件信息

//简介:第一行显示,距离系统爆炸时间
//第二行显示,还剩
//第三行显示,00时,00分,00秒
//第四行显示,             周林

//按下旋钮开关,开始设定秒,秒编辑位闪动。左右旋转设定数值,
//在按下开关,秒确定,设定分,分编辑位闪动左右调数值,
//再按下,分确定,小时位闪动。左右转调小时,再按一下。
//时间确定,开始倒计时。到达定时时间后停止,并闪动。

#include 
#include 

/********************* 定义 ********************************/
#define LCD_data  P0       //数据口
sbit LCD_RS = P2 ^ 0; //寄存器选择输入
sbit LCD_RW = P2 ^ 1; //液晶读/写控制
sbit LCD_EN = P2 ^ 2; //液晶使能控制
sbit LCD_PSB = P2 ^ 3; //串/并方式控制
sbit LCD_RST = P2 ^ 5; //液晶复位端口

sbit sset=P3^4;//设置按钮
sbit spk=P1^4;
sbit sadd=P2^7;
sbit sdel=P2^6;

signed char second=0minute=0hour=0count=0keycount=0;
signed char key=0;
unsigned char code DIS1[] =
{
  “距离系统爆炸时间“
};
unsigned char code DIS2[] =
{
  “还剩:“
};
unsigned char code DIS31[] =
{
  “时“
};
unsigned char code DIS32[] =
{
  “分“
};
unsigned char code DIS33[] =
{
  “秒“
};
unsigned char code DIS4[] =
{
  “周林“
};
unsigned char code table2[]=“0123456789“;

char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节

/*********************延时子函数**************************/

void delayNOP()//us延时子函数   (4.34us)
{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
}

void delayms(unsigned int ms)//ms延时子函数
{
  unsigned char y;
  while (ms--)
  {
    for (y = 0; y < 114; y++)
      ;
  }
}
//******************检查LCD忙状态**************************


bit lcd_busy()//检查LCD忙状态 1忙,0闲
{
  bit result;
  LCD_RS = 0;
  LCD_RW = 1;
  LCD_EN = 1;
  delayNOP();
  result = (bit)(P0 &0x80);
  LCD_EN = 0;
  return (result);
}

//***********************写指令数据***********************

void lcd_wcmd(unsigned char cmd)//写指令数据到LCD
{
  while (lcd_busy())
  {
 ;
  }
  LCD_RS = 0;
  LCD_RW = 0;
  LCD_EN = 1;
  P0 = cmd;
  delayNOP();
  LCD_EN = 0;
}

void lcd_wdat(unsigned char dat)//写显示数据到LCD
{
  while (lcd_busy())
    ;
  LCD_RS = 1;
  LCD_RW = 0;
  LCD_EN = 1;
  P0 = dat;
  delayNOP();
  LCD_EN = 0;
}

void writesmh(unsigned char addunsigned char date)//显示个位和十位数据
{
unsigned char shige;
shi=date/10;
ge=date%10;
lcd_wcmd(0x80+add);
delayms(5);
lcd_wdat(table2[shi]);
delayms(5);
lcd_wdat(table2[ge]);
delayms(5);
}

//*********************初始化设定****************************

void lcd_init()
{
  LCD_PSB = 1; //并口方式

  LCD_RST = 0; //液晶复位
  delayms(5);  //液晶复位
  LCD_RST = 1; //液晶复位
  delayms(5);  //液晶复位

  lcd_wcmd(0x34); //扩充功能设定,扩充指令,选8位数据
  delayms(5);
  lcd_wcmd(0x30); //功能设定,基本指令操作,选8位数据
  delayms(5);
  lcd_wcmd(0x0C); //显示开,关光标,关光标反白允许。
  delayms(5);
  lcd_wcmd(0x04); //光标的移动方向
  delayms(5);
  lcd_wcmd(0x01); //清除LCD的显示内容
  delayms(5);

TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=0;
EX0=0; //外部中断0允许
IT0=1; //外部中断0为边沿触发方式
}

//*********************设定显示位置子函数**********************

void lcd_pos(unsigned char X unsigned char Y)//设定显示位置
{
  unsigned char pos;

  if (X == 1)
  {
    X = 0x80;
  }
  else if (X == 2)
  {
    X = 0x90;
  }
  else if (X ==

评论

共有 条评论