51单片机结构简单,架构体系完备,学习资料丰富,应用领域广泛。通过对51单片机的学习,可帮助小白实现快速入门电子设计,理解电路系统工作原理,为高级嵌入式芯片的学习及开发打下坚实基础。
本篇描述
1、51+Proteus8.10;
2、学习1302时钟芯片、1602液晶驱动;
仿真设计
采用Proteus作为仿真设计工具。Proteus是一款著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,真正实现了从概念到产品的完整设计。
软件设计
采用Keil作为软件设计工具。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。
#include#include #include #define uint unsigned int #define uchar unsigned char sbit DS1302_IO = P1^7; sbit DS1302_SCLK = P1^6; sbit DS1302_RST = P1^5; sbit LCD1602_RS = P2^0; sbit LCD1602_RW = P2^1; sbit LCD1602_EN = P2^2; uchar LCD_1[]={"DATE: 00-00-00 "}; uchar LCD_2[]={"TIME: 0000 "}; uchar DateTime[7]; void DelayMS(uint ms) { uchar i; while(ms--) { for(i=0;i<120;i++); } } uchar Get_A_Byte_FROM_DS1302() { uchar i,b=0x00; for(i=0;i<8;i++) { b |= _crol_((uchar)DS1302_IO,i); DS1302_SCLK=1; DS1302_SCLK=0; } return b/16*10+b%16; } void Write_A_Byte_TO_DS1302(uchar x) { uchar i; for(i=0;i<8;i++) { DS1302_IO=x&0x01; DS1302_SCLK=1; DS1302_SCLK=0; x>>=1; } } uchar Read_Data(uchar addr) { uchar dat; DS1302_RST = 0; DS1302_SCLK=0; DS1302_RST=1; Write_A_Byte_TO_DS1302(addr); dat = Get_A_Byte_FROM_DS1302(); DS1302_SCLK=1; DS1302_RST=0; return dat; } uchar Read_LCD_State() { uchar state; LCD1602_RS=0; LCD1602_RW=1; LCD1602_EN=1; DelayMS(1); state=P0; LCD1602_EN = 0; DelayMS(1); return state; } void LCD_Busy_Wait() { while((Read_LCD_State()&0x80)==0x80); DelayMS(5); } void Write_LCD_Data(uchar dat) { LCD_Busy_Wait(); LCD1602_RS=1; LCD1602_RW=0; LCD1602_EN=0; P0=dat; LCD1602_EN=1; DelayMS(1); LCD1602_EN=0; } void Write_LCD_Command(uchar cmd) { LCD_Busy_Wait(); LCD1602_RS=0; LCD1602_RW=0; LCD1602_EN=0; P0=cmd; LCD1602_EN=1; DelayMS(1); LCD1602_EN=0; } void Set_LCD_POS(uchar p) { Write_LCD_Command(p|0x80); } void Display_LCD_String(uchar p,uchar *s) { uchar i; Set_LCD_POS(p); for(i=0;i<16;i++) { Write_LCD_Data(s[i]); DelayMS(1); } } void Format_DateTime(uchar d,uchar *a) { a[0]=d/10+'0'; a[1]=d%10+'0'; } void Init_LCD() { Write_LCD_Command(0x38); DelayMS(1); Write_LCD_Command(0x01); DelayMS(1); Write_LCD_Command(0x06); DelayMS(1); Write_LCD_Command(0x0c); DelayMS(1); } void GetTime() { uchar i,addr = 0x81; for(i=0;i<7;i++) { DateTime[i]=Read_Data(addr);addr+=2; } } void main() { Init_LCD(); while(1) { GetTime(); Format_DateTime(DateTime[6],LCD_1+6); Format_DateTime(DateTime[4],LCD_1+9); Format_DateTime(DateTime[3],LCD_1+12); Format_DateTime(DateTime[2],LCD_2+6); Format_DateTime(DateTime[1],LCD_2+9); Format_DateTime(DateTime[0],LCD_2+12); Display_LCD_String(0x00,LCD_1); Display_LCD_String(0x40,LCD_2); } }
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6035文章
44554浏览量
634635 -
液晶显示
+关注
关注
6文章
586浏览量
40291 -
51单片机
+关注
关注
274文章
5702浏览量
123491 -
LCD1602
+关注
关注
14文章
607浏览量
52576 -
显示时钟
+关注
关注
0文章
5浏览量
1631
原文标题:5044-LCD1602液晶显示时钟
文章出处:【微信号:电子开发圈,微信公众号:电子开发圈】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
LCD1602液晶显示模块
LCD1602内部写入需要显示的内容。RS=0时,选择命令寄存区,即向LCD1602内部写入需要显示内容的显示位置。R/W引脚:E引脚:D0
发表于 07-20 06:48
lcd1602与单片机连接图,基于51单片机的lcd1602液晶显示屏连接电路图
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 L
发表于 10-20 11:33
•14w次阅读
LCD1602的引脚说明和使用51单片机控制1602液晶显示的代码免费下载
本文档的主要内容详细介绍的是LCD1602的引脚说明和使用51单片机控制1602液晶显示的代码免费下载。
发表于 07-31 17:35
•9次下载
使用51单片机驱动LCD1602液晶显示的程序和电路图免费下载
本文档的主要内容详细介绍的是使用51单片机驱动LCD1602液晶显示的程序和电路图免费下载。
发表于 07-10 17:40
•11次下载
使用51单片机进行LCD1602液晶显示的控制代码程序免费下载
本文档的主要内容详细介绍的是使用51单片机进行LCD1602液晶显示的控制代码程序免费下载。
发表于 06-11 17:47
•8次下载
使用单片机实现LCD1602液晶显示的DS12887实时时钟的C语言程序
本文档的主要内容详细介绍的是使用单片机实现LCD1602液晶显示的DS12887实时时钟的C语言程序免费下载.
发表于 03-26 11:40
•26次下载
基于AT89C51单片机的电子钟设计(LCD1602液晶显示)
**基于51单片机的电子钟设计(LCD1602液晶显示)设计要求:设计一个用LCD1602液晶显示
发表于 11-04 14:51
•35次下载
评论