51单片机数字时钟仿真(LCD1602液晶显示)+源程序+电路原理图

发布者:开国古泉最新更新时间:2020-08-11 来源: 51hei关键字:51单片机  数字时钟  LCD1602液晶显示 手机看文章 扫描二维码
随时随地手机看文章

下面是51单片机数字时钟程序:

#include

#define DSbus P0

#define LCDbus P1


//定义DS12C887和LCD的控制线

sbit DS_CS = P2^7;        //引脚13,片选信号输入,低电平有效。

sbit DS_AS = P2^4;        //引脚14,地址选通输入。

sbit DS_RW = P2^5;        //引脚15,读/写输入。

sbit DS_DS = P2^6;        //引脚17,数据选通或读输入。

sbit LCD_RS=P2^0;

sbit LCD_EN=P2^2;

//时间变量定义

unsigned char Counter;

unsigned char Hour,Min,Sec,Year,Month,Date,Week;


/*DS12CR887驱动程序---------------------------------------------------------------------------*/

//往DS12CR887写数据函数

void DS12887write(unsigned char add,unsigned char Date)         

{

        DS_CS=0;

  DS_DS=1;

        DS_RW=1;

  DS_AS=1;

        DSbus=add;

        DS_AS=0;

  DS_RW=0;

        DSbus=Date;

        DS_RW=1;

  DS_AS=1;

        DS_CS=1;

}

//读取DS12CR887数据函数

unsigned char DS12887read(unsigned char add)

{

        unsigned char z;

        DS_CS=0;

  DS_RW=1;

        DS_DS=1;

  DS_AS=1;

        DSbus=add;

        DS_AS=0;

  DS_DS=0;

  DSbus=0xff;

        z=DSbus;

        DS_DS=1;

  DS_AS=1;

        DS_CS=1;

        return z;

}

//DS12CR887初始化函数

void DS12887LCDinit()

{

        DS_AS=0; DS_DS=0; DS_RW=0;

        DS12887write(0x0a,0x20);//DS12CR887寄存器A功能设置,开启时钟振荡器

        DS12887write(0x0b,0x06);//寄存器B功能设置,不开启闹钟中断使能,数据模式为二进制,24小时模式。

        //DS12887write(4,0x8);DS12887write(2,0x00);DS12887write(0,0x00); //给DS12CR887的时分秒赋值,开机后显示8:00:00

}

void Delay(unsigned int z)

{

        unsigned int x,y;

   for(x=z;x>0;x--)

         for(y=110;y>0;y--);

}

void LCDwritecom(unsigned char com)

{

        LCD_RS=0;

        LCDbus=com;

        Delay(5);

        LCD_EN=1;

        Delay(5);

        LCD_EN=0;

}

void LCDwritecomdata(unsigned char dat)

{

        LCD_RS=1;

        LCDbus=dat;

        Delay(5);

        LCD_EN=1;

        Delay(5);

        LCD_EN=0;

}

void LCDinit()

{

        LCD_EN=0;

        LCDwritecom(0x38);

        LCDwritecom(0x0c);

        LCDwritecom(0x06);

        LCDwritecom(0x01);

        LCDwritecom(0x80);

}

void Timedisplay(void)

{

        //LCDwritecom(1);

        LCDwritecom(0x80);

//往液晶屏填写"小时"数据-----------------------------------------------

        Hour=DS12887read(4);         //读取DS12CR887的小时数据

        if((Hour/10)==0)LCDwritecomdata(0);

                else        LCDwritecomdata(Hour/10+0x30);//小时十位

        LCDwritecomdata(Hour%10+0x30); //小时个位

        LCDwritecomdata(':');        //时钟分隔符":"

//往液晶屏填写"分钟"数据-----------------------------------------------

        Min=DS12887read(2);          //读取DS12CR887的分数据

        LCDwritecomdata(Min/10+0x30);

        LCDwritecomdata(Min%10+0x30);

        LCDwritecomdata(':');        //时钟分隔符":"                               

//往液晶屏填写"秒"数据-------------------------------------------------

        Sec=DS12887read(0);          //读取DS12CR887的秒数据

        LCDwritecomdata(Sec/10+0x30);

        LCDwritecomdata(Sec%10+0x30);

        Delay(100);                               

}

void Datedisplay(void)

{

        //LCDwritecom(1);

        LCDwritecom(0xc0);

//往液晶屏填写"年"数据-----------------------------------------------

        LCDwritecomdata('2');

        LCDwritecomdata('0');

        Year=DS12887read(9);         //读取DS12CR887的年数据

       

        LCDwritecomdata(Year/10+0x30);//年十位

        LCDwritecomdata(Year%10+0x30); //年个位

        LCDwritecomdata('/');        //时钟分隔符":"

//往液晶屏填写"月"数据-----------------------------------------------

        Month=DS12887read(8);          //读取DS12CR887的月数据

        LCDwritecomdata(Month/10+0x30);

        LCDwritecomdata(Month%10+0x30);

        LCDwritecomdata('/');        //时钟分隔符":"                               

//往液晶屏填写"日"数据-------------------------------------------------

        Date=DS12887read(7);          //读取DS12CR887的日数据

        LCDwritecomdata(Date/10+0x30);

        LCDwritecomdata(Date%10+0x30);

//往液晶屏填写"星期"数据-------------------------------------------------

        Week=DS12887read(6);          //读取DS12CR887的日数据

        LCDwritecomdata(0);

        LCDwritecomdata(Week-1+0x30);

        Delay(100);                               

}

void main()

{

//        unsigned char i;

        LCDinit();

        DS12887LCDinit();

  DS12887write(0x0a,0x00);     //开始调时,DS12CR887关闭时钟振荡器

        DS12887write(0,55);         //秒

        DS12887write(2,59);

        DS12887write(4,23);

  DS12887write(6,5);         //星期

        DS12887write(7,22);  //日

        DS12887write(8,9);  //

        DS12887write(9,12);  //

        //display_Date();

        while(1)

        {

                Timedisplay();

          Datedisplay();

                Delay(100);

        }

}


关键字:51单片机  数字时钟  LCD1602液晶显示 引用地址:51单片机数字时钟仿真(LCD1602液晶显示)+源程序+电路原理图

上一篇:51单片机软件SPI初始化ILI9488-DPI模式程序
下一篇:51单片机电子日历(可调整 带温度)DS1302时钟+12864LCD显示

推荐阅读最新更新时间:2024-11-07 22:50

51单片机驱动超声波测距模块C51程序
#include reg52.h #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //******************* 函数声明************************** void init_Total(); //总初始化 void init_T0(); //初始化定时器T0 void init_T1(); //初始化定时器T1 void init_inter0();//初始化外部中断1 void send_T(); void delay(uint z);//延时一段时间 void delay_
[单片机]
基于51单片机的风机温度控制系统的设计
0.引言 风机为通用机械,它广泛地使用在国民经济的各个部门中。风机广泛用在工厂、矿井、车辆、建筑物、家用电器等的通风、排尘和冷却;谷物的烘干和选送;风洞风源和气垫船的充气和推进等。另外,在一些对环境温度有特殊要求的场所,要求温度变化在1℃以下,这就需要一种可以根据外界环境温度来确定风机的转动与停止的风机温控系统。 本文设计的风机微小温控系统,可使温度检测精度达到0.01℃,并可手动设定温度上下限,且具有自动声光报警功能。 1.设计要求 本系统采用PT1000温度传感器检测环境温度(温度检测精度0.01℃),根据环境温度变化控制风机降温,并具备按键手动设定温度上下限、声光报警等功能。其控制面板示意图如图1所示。
[单片机]
基于<font color='red'>51单片机</font>的风机温度控制系统的设计
51单片机学习笔记1 -- 单片机最小系统仿真电路绘制
1.Protues新建工程 打开Protues,首页打开ISIS图标,绘制电路图 进入到以下绘制界面 像电路中的芯片、电阻电容等,都可以在器件区找到,直接点击器件区的Pick Device,会弹出来一个器件选择框 可以看到器件选择框中有很多类别的元器件,对于行业单词不熟悉的我们可以在搜索框键入我们想找的元器件,比如51芯片,在搜索框键入89C52,可以看到器件明细区出来两个AT89C52芯片待选 选中需要的芯片,右侧会出现选中的元器件对应预览图和PCB封装图,可以从预览图中看到我们选中的芯片是不是我们想要的,引脚数是否一样等,右下角有个下拉菜单可以选择不同的PCB封装,但PCB不是我们电路图所需要考虑的,所以选中芯
[单片机]
<font color='red'>51单片机</font>学习笔记1 -- 单片机最小系统仿真电路绘制
51单片机产生2KHZ方波程序
51单片机如果采用11.0592MHZ的晶振,则一个机器周期等于12的震荡周期(晶振频率的倒数),即每个机器周期约是1.085us,其计算方法分析如下: 由于晶振是11.0592MHz,则一个机器周期等于(1S/11.0592MHZ)*12*106=1.085us 如果采用12MHZ的晶振,则一个机器周期等于(1S/12MHZ)*12*106=1us 以用采用11.0592MHZ的晶振,利用51单片机的定时器0产生2khz程序为例,分析如下: 2kHz是500us产生一个的方波(波峰250us,波谷250us)取半个周期记为t=250us 250us/1.09us需要计数229次,因而初值应装,TH0=(655
[单片机]
51单片机对LED点阵屏的设计
LED点阵屏发光亮度强,指示效果好,可以制作运动的发光图文,更容易吸引人的注意力,信息量大,随时更新,有着非常好的广告和告示效果。笔者此处就LED点阵屏动态扫描显示作一个简单的介绍。 1. LED点阵屏显示原理概述 图1-1为一种8x8的LED点阵单色行共阳模块的内部等效电路图,对于红光LED其工作正向电压约为1.8v,其持续工作的正向电流一般10ma左右,峰值电流可以更大。如下图,当某一行线为高电平而某一列线为低时,其行列交叉的点就被点亮,当某一行线为低电平时,无论列线如何,对应的这一行的点全部为暗。LED点阵屏显示就是通过一定的频率进行逐行扫描,数据端不断输入数据显示,只要扫描频率足够高,由于人眼的视觉残留效应,就可以看到
[单片机]
<font color='red'>51单片机</font>对LED点阵屏的设计
51单片机串口通信及波特率设置
MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。 1. 数据缓冲寄存器SBUF SBUF是可以直接寻址的专用寄存器。物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。 2. 状态
[单片机]
PIC单片机和AVR单片机与51单片机的优缺点分析
1、51系列单片机的优缺点分析 51系列是应用最广泛的单片机,由于产品硬件结构合理,指令系统规范,加之生产历史“悠久”,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。 51系列优点之一是它从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,或布尔处理器。它的处理对象不是字或字节而是位。它不光能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。虽然其他种类的单片机也具有位处理功能,但能进行位逻辑运算
[单片机]
PIC单片机和AVR单片机与<font color='red'>51单片机</font>的优缺点分析
基于51单片机的车用数字仪表设计与实现
摘 要:介绍了一种以MCS 51单片机为主控器,以ADC0809为核心,以气压、油压、温度、霍尔元件等传感器为主要外围元件的车用数字仪表(VDI)的设计与实现。该仪表系统具有显示直观、准确,使用方便可靠等优点,代表了车用仪表的最新发展趋势。 关键词: MCS 51单片机;传感器;车用数字仪表 引言 ---车辆仪表是驾驶员与汽车进行信息交流的重要接口和界面,是车辆安全行驶的重要保证。随着电子技术的广泛应用,传统汽车仪表逐渐被微处理器为核心的电子控制数字仪表取代已成为必然趋势。然而,目前国内车辆仪表数字化水平还不高,绝大部分仪表还是模拟式的,而大多数模拟仪表表头的体积较大、数量多,使得显示系统拥挤不堪,影响美观;另外
[单片机]
基于<font color='red'>51单片机</font>的车用数字仪表设计与实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved