带I2C的LCD1602液晶显示51单片机程序
实现功能:液晶屏上显示日期及动态时间,由中断函数来实现时间的动态变换

#include <reg52.h>//头文件
#include <intrins.h>
#define uint    unsigned int
#define uchar   unsigned char
#define C51_SCL     P3^0            //SCL引脚
#define C51_SDA     P3^1            //SDA引脚
#define ADDR        0X4E            //设备地址
#define String_len1     16      //液晶显示第一行字符串长度
#define String_len2     16          //液晶显示第二行字符串长度
uchar miao,shi,fen;                 //显示时分秒
uchar count;
/*******************************************/
sbit SCL = C51_SCL;                    //I2C串口
sbit SDA = C51_SDA;                    //I2C串口
uchar code table[]="21-7-30 ";      //LCD初始化显示内容
uchar code table1[]="23:59:45 ";
/*********************延时函数*************************************/
static void delay_us()
{;;  //用两个空语句实现短时间延时,当晶振为11.0592MHz时,约4~5微秒
}
void delay(uchar n)
{int i,j;for(i=0;i<n;i++)for(j=0;j<120;j++);
}
/**********************************************/
/************IIC协议的起始信号*****************/
void IIC_Start()
{SDA=1;SCL=1;delay_us();SDA=0;delay_us();
}/**    IIC协议的应答信号* @param None* @retval  None*/
void IIC_Ack()
{uchar i;SCL=1;delay_us();while((SDA==1)&&(i<250))i++;SCL=0;delay_us();
}/*** @brief   写入一个字节到I2C总线* @param   date:将要被写入的数据* @retval None*/
void IIC_Write_Byte(uchar date)
{uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;SCL=0;delay_us();SDA=CY;delay_us();SCL=1;delay_us();}SCL=0;delay_us();SDA=1;delay_us();
}/*** @brief   通过IIC协议写一个命令到1602液晶上* @param   comm:将要被写入的命令* @retval None*/
void IIC_Write_Comm_LCD(uchar comm)
{uchar data_h = comm & 0xf0;uchar data_l = (comm & 0x0f) << 4;IIC_Write_Byte(0x00+data_h);IIC_Ack();IIC_Write_Byte(0x04+data_h);IIC_Ack();IIC_Write_Byte(0x00+data_h);IIC_Ack();delay(5);IIC_Write_Byte(0x00+data_l);IIC_Ack();IIC_Write_Byte(0x04+data_l);IIC_Ack();IIC_Write_Byte(0x00+data_l);IIC_Ack();delay(5);
}/*** @brief   通过IIC写一个数据到1602液晶上* @param date:将要被写入的数据* @retval None*/
void IIC_Write_Date_LCD(uchar date)
{uchar data_h = date & 0xf0;uchar data_l = (date & 0x0f) << 4;IIC_Write_Byte(0x01+data_h);IIC_Ack();IIC_Write_Byte(0x05+data_h);IIC_Ack();IIC_Write_Byte(0x01+data_h);IIC_Ack();delay(5);IIC_Write_Byte(0x01+data_l);IIC_Ack();IIC_Write_Byte(0x05+data_l);IIC_Ack();IIC_Write_Byte(0x01+data_l);IIC_Ack();delay(5);
}
/********************************************************/
/*** @brief    初始化1602液晶,由于只有一个设备,所以一直占用总线* @param  None* @retval  None*/
/***********************1602程序初始化函数*************************************/
void LCD1602_Init()
{uchar i = 0;IIC_Start();IIC_Write_Byte(ADDR);IIC_Ack();IIC_Write_Comm_LCD(0x02);  //设置四线发送数据IIC_Write_Comm_LCD(0x28); //设置显示模式IIC_Write_Comm_LCD(0x08);   //显示关闭IIC_Write_Comm_LCD(0x0c); //设置光标开关IIC_Write_Comm_LCD(0x06);   //设置光标移动IIC_Write_Comm_LCD(0x01);   //清屏for(i=0;i<String_len1;i++)    //显示预先设定值{IIC_Write_Date_LCD(table[i]);}IIC_Write_Comm_LCD(0xc0);for(i=0;i<String_len2;i++){IIC_Write_Date_LCD(table1[i]);}TMOD=0x01;                   //定时器TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}       /**********************显示时分**********************************/
void write_sfm(uchar add,uchar date)
{uchar shi,ge;shi=date/10;ge=date%10;IIC_Write_Comm_LCD(0x80+0x40+add);IIC_Write_Date_LCD(0x30+shi);IIC_Write_Date_LCD(0x30+ge);
}/*******************主函数***********************************/
void main()
{   LCD1602_Init();//LCD1602初始化程序while(1);
}
/**************************中断程序**************************/
void timer0() interrupt 1//实现时分秒的动态变换
{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;
if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(0,shi);//待修改液晶屏的地址及数据}write_sfm(3,fen);}write_sfm(6,miao);}
}

**带I2C的LCD1602液晶显示51单片机程序**相关推荐

  1. 51单片机程序开发入门知识

    51单片机在我的理解上来说,就是遵循51指令集工作的芯片.他就像一台超微型的电脑,里面有内存.硬盘.CPU等基本配备. 而他所谓的CPU使用的就是51指令集,他的硬盘就是内置的Flash,他的内存也是 ...

  2. 51单片机程序下载、ISP及串口基础知识

    本文详细介绍了串口.51单片机的ISP下载等基础知识,已经学过单片机的也可以看看,加强一下对这方面的了解. 串口 串行接口简称串口,也称串行通信接口,是采用串行通信方式的扩展接口. 我们比较熟悉的US ...

  3. 编写51单片机程序,输出方波,at89s52的单片机

    编写51单片机程序,输出方波. 要求:晶振为12MHz,用T0做定时器,在P1的低四位输出四种频率的方波: P1.3 = 1.25kHz.P1.2 = 2.5kHz.P1.1 = 5kHz.P1.0 ...

  4. Windows 7 64位用STC ISP下载51单片机程序的方法

    Windows 7 64位用STC ISP下载51单片机程序的方法2011-09-08 14:17 1  首先在宏晶的主页 http://www.stcmcu.com/ 下载最新的 STC-ISP.E ...

  5. 51单片机c语言程序执行顺序,51单片机程序执行流程详细分析

    这里是一个循环,根据DJNZ指令的功能:每执行一次DJNZ RO, IDATALOOP就将R0的值减1,若R0的值不为0则就跳到IDATALOOP地址去.很显然这是一个循环,那么RO的值是多少呢,在以 ...

  6. 单片机流星灯_LED流星雨灯的制作(51单片机程序代码)

    本文主要介绍了LED流星雨灯的制作原理,包括成品图片,电路原理图以及所用的51单片机的程序代码. 一.图片分享: 二.PCB文件分享: 三.原理图分享: 上面只做了5根灯管,如果需要增加灯管的话,只需 ...

  7. 软件与计算机硬件加密,51单片机程序进行软件加密和硬件解密的方法

    由于固化在片外EPROM 里的单片机程序容易复制,所以,如不在技术上采取保护措施,则程序中所采用的处理方法易被他人分析仿制.对单片机程序进行加密是一种有效的保护措施,也是一项实用的技术.虽然本身带有E ...

  8. STC 51单片机程序下载失败总结

    STC为宏晶公司推出的国产51单片机,其优点在于价格低廉,功能强大,使用方便,尤其是其串口ISP下载程序的方式方便了大量用户,免去了购买昂贵的编程器,非常适合单片机入门学习使用. 但是初学者常会遇到程 ...

  9. 51单片机程序及调试步骤实战经验

    我刚参加工作的时候,用的是stc 51单片机的,51单片机不像stm32那样可以通过st-link在keil上面在线仿真. 有时候出现bug的时候,非常难找问题,要一段一段屏蔽然后测试. 在刚开始接触 ...

  10. 51单片机程序烧写说明

    程序烧写说明 USBASP下载器使用方法 启动下载软件PROGISP1.6.7 烧录步骤: 设置编程器及接口,编程器选择USBASP,接口为USB(如图) 选择芯片,在选择芯片下拉列表可以选择正在使用 ...

最新文章

  1. css之文本两端对齐的两种解决方法
  2. 基于脑电图的情绪识别BCI应用于DOC患者
  3. 简析并查集[C/C++]
  4. 开源 Serverless 里程碑:Knative 1.0 来了
  5. [LeetCode] Add Digits - 数字各个位数求和
  6. docker中创建redis及在外部使用rdm连接
  7. mysql中预定义常量_PHP预定义常量
  8. python3 在线工具_Curl转python在线工具
  9. 漫画:什么是 “智猪博弈” ?
  10. java 含有package cmd_如何在命令提示符下编译运行含有Package的java文件
  11. tricks about and-or in python
  12. Android:Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
  13. c语言课程设计报告书通讯录,C语言课程设计学生通讯录管理系统设计
  14. C++模板函数 学习记录
  15. dex运行linux,三星Dex新玩法:通过APP运行Linux、玩游戏
  16. 阿尔法营任务黑客机器人游戏答案
  17. Android 获取毫秒时间戳
  18. Win10磁盘管理器:轻松和安全地调整Win10的分区大小
  19. IE8跳转谷歌浏览器亲测有效
  20. linux查看用户访问记录,Linux记录登录用户的行为

热门文章

  1. 电力拖动自动控制系统_电气工程及其自动化为什么这么火!原因有这些,建议收藏...
  2. SIFT特征匹配及其实现
  3. 《TensorFlow技术解析与实战》——3.3 可视化的例子
  4. seekbar 的用法
  5. AutoCAD2000~2010完整版下载地址
  6. excel使用教程_火遍全球的14个Excel学习网:大神套路、视频课、软件下载应有尽有...
  7. [转]技术以外的功夫
  8. google退出中国声明 英文版原文
  9. linux磁带机找不到,如何在Linux下安装磁带机
  10. Python计算机视觉之特征提取与图像匹配