**带I2C的LCD1602液晶显示51单片机程序**
带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单片机程序**相关推荐
- 51单片机程序开发入门知识
51单片机在我的理解上来说,就是遵循51指令集工作的芯片.他就像一台超微型的电脑,里面有内存.硬盘.CPU等基本配备. 而他所谓的CPU使用的就是51指令集,他的硬盘就是内置的Flash,他的内存也是 ...
- 51单片机程序下载、ISP及串口基础知识
本文详细介绍了串口.51单片机的ISP下载等基础知识,已经学过单片机的也可以看看,加强一下对这方面的了解. 串口 串行接口简称串口,也称串行通信接口,是采用串行通信方式的扩展接口. 我们比较熟悉的US ...
- 编写51单片机程序,输出方波,at89s52的单片机
编写51单片机程序,输出方波. 要求:晶振为12MHz,用T0做定时器,在P1的低四位输出四种频率的方波: P1.3 = 1.25kHz.P1.2 = 2.5kHz.P1.1 = 5kHz.P1.0 ...
- 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 ...
- 51单片机c语言程序执行顺序,51单片机程序执行流程详细分析
这里是一个循环,根据DJNZ指令的功能:每执行一次DJNZ RO, IDATALOOP就将R0的值减1,若R0的值不为0则就跳到IDATALOOP地址去.很显然这是一个循环,那么RO的值是多少呢,在以 ...
- 单片机流星灯_LED流星雨灯的制作(51单片机程序代码)
本文主要介绍了LED流星雨灯的制作原理,包括成品图片,电路原理图以及所用的51单片机的程序代码. 一.图片分享: 二.PCB文件分享: 三.原理图分享: 上面只做了5根灯管,如果需要增加灯管的话,只需 ...
- 软件与计算机硬件加密,51单片机程序进行软件加密和硬件解密的方法
由于固化在片外EPROM 里的单片机程序容易复制,所以,如不在技术上采取保护措施,则程序中所采用的处理方法易被他人分析仿制.对单片机程序进行加密是一种有效的保护措施,也是一项实用的技术.虽然本身带有E ...
- STC 51单片机程序下载失败总结
STC为宏晶公司推出的国产51单片机,其优点在于价格低廉,功能强大,使用方便,尤其是其串口ISP下载程序的方式方便了大量用户,免去了购买昂贵的编程器,非常适合单片机入门学习使用. 但是初学者常会遇到程 ...
- 51单片机程序及调试步骤实战经验
我刚参加工作的时候,用的是stc 51单片机的,51单片机不像stm32那样可以通过st-link在keil上面在线仿真. 有时候出现bug的时候,非常难找问题,要一段一段屏蔽然后测试. 在刚开始接触 ...
- 51单片机程序烧写说明
程序烧写说明 USBASP下载器使用方法 启动下载软件PROGISP1.6.7 烧录步骤: 设置编程器及接口,编程器选择USBASP,接口为USB(如图) 选择芯片,在选择芯片下拉列表可以选择正在使用 ...
最新文章
- css之文本两端对齐的两种解决方法
- 基于脑电图的情绪识别BCI应用于DOC患者
- 简析并查集[C/C++]
- 开源 Serverless 里程碑:Knative 1.0 来了
- [LeetCode] Add Digits - 数字各个位数求和
- docker中创建redis及在外部使用rdm连接
- mysql中预定义常量_PHP预定义常量
- python3 在线工具_Curl转python在线工具
- 漫画:什么是 “智猪博弈” ?
- java 含有package cmd_如何在命令提示符下编译运行含有Package的java文件
- tricks about and-or in python
- Android:Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
- c语言课程设计报告书通讯录,C语言课程设计学生通讯录管理系统设计
- C++模板函数 学习记录
- dex运行linux,三星Dex新玩法:通过APP运行Linux、玩游戏
- 阿尔法营任务黑客机器人游戏答案
- Android 获取毫秒时间戳
- Win10磁盘管理器:轻松和安全地调整Win10的分区大小
- IE8跳转谷歌浏览器亲测有效
- linux查看用户访问记录,Linux记录登录用户的行为
热门文章
- 电力拖动自动控制系统_电气工程及其自动化为什么这么火!原因有这些,建议收藏...
- SIFT特征匹配及其实现
- 《TensorFlow技术解析与实战》——3.3 可视化的例子
- seekbar 的用法
- AutoCAD2000~2010完整版下载地址
- excel使用教程_火遍全球的14个Excel学习网:大神套路、视频课、软件下载应有尽有...
- [转]技术以外的功夫
- google退出中国声明 英文版原文
- linux磁带机找不到,如何在Linux下安装磁带机
- Python计算机视觉之特征提取与图像匹配