• 大小: 80KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: 其他
  • 标签: lcd显示  数字时钟  

资源简介

protues仿真完好通过,程序代码适合初学者,lcd采用1602,对于学习液晶和DS1302有很好的帮助

资源截图

代码片段和文件信息

/***************************************************/ 
#include     //包含单片机寄存器的头文件
#include   //包含_nop_()函数定义的头文件
#define uchar unsigned char
#define uint  unsigned int
uchar tempcount=0;
/***********************************************************************
以下是DS1302芯片的操作程序
************************************************************************/
uchar code digit[10]={“0123456789“};   //定义字符数组显示数字
uchar *digit1[]={“SUN““MON““TUS““WEN““THU““FRI““SAT“}; //周日,周一到周六
sbit DATA=P3^7;   //位定义1302芯片的接口,数据输出端定义在P1.1引脚
sbit RST=P3^5;    //位定义1302芯片的接口,复位端口定义在P1.1引脚
sbit SCLK=P3^6;   //位定义1302芯片的接口,时钟输出端口定义在P1.1引脚
sbit key1=P3^0;   //停止按钮
sbit key2=P3^1;   //开始按钮
sbit add=P2^4;   //加值
sbit subtract=P2^5;//减值
sbit tiaoshi=P3^4; //定位
/*****************************************************
函数功能:延时若干微秒
入口参数:n
***************************************************/ 
void delaynus(uchar n)
{
 uchar i;
 for(i=0;i      ;
}

/*****************************************************
函数功能:向1302写一个字节数据
入口参数:x
***************************************************/ 
void Write1302(uchar dat)
{
  uchar i; 
  SCLK=0;             //拉低SCLK,为脉冲上升沿写入数据做好准备
  delaynus(2);        //稍微等待,使硬件做好准备
  for(i=0;i<8;i++)       //连续写8个二进制位数据
    {
    DATA=dat&0x01;     //取出dat的第0位数据写入1302
delaynus(2);        //稍微等待,使硬件做好准备
SCLK=1;             //上升沿写入数据
delaynus(2);       //稍微等待,使硬件做好准备
SCLK=0;            //重新拉低SCLK,形成脉冲
dat>>=1;           //将dat的各数据位右移1位,准备写入下一个数据位
  }

 }
/*****************************************************
函数功能:根据命令字,向1302写一个字节数据
入口参数:Cmd,储存命令字;dat,储存待写的数据
***************************************************/ 
void WriteSet1302(uchar Cmduchar dat)
 {
    RST=0;           //禁止数据传递
    SCLK=0;          //确保写数居前SCLK被拉低
RST=1;           //启动数据传输
delaynus(2);     //稍微等待,使硬件做好准备
Write1302(Cmd);  //写入命令字
Write1302(dat);  //写数据
SCLK=1;          //将时钟电平置于已知状态
RST=0;           //禁止数据传递
 }
/*****************************************************
函数功能:从1302读一个字节数据
入口参数:x
***************************************************/ 
 uchar Read1302(void)
 {
    uchar idat;
delaynus(2);       //稍微等待,使硬件做好准备
for(i=0;i<8;i++)   //连续读8个二进制位数据
 {
    dat>>=1;       //将dat的各数据位右移1位,因为先读出的是字节的最低位
if(DATA==1)    //如果读出的数据是1
 dat|=0x80;    //将1取出,写在dat的最高位
 SCLK=1;       //将SCLK置于高电平,为下降沿读出
 delaynus(2);  //稍微等待
 SCLK=0;       //拉低SCLK,形成脉冲下降沿
 delaynus(2);  //稍微等待
  }  
   return dat;        //将读出的数据返回
}  
/*****************************************************
函数功能:根据命令字,从1302读取一个字节数据
入口参数:Cmd
***************************************************/ 
uchar  ReadSet1302(uchar Cmd)
 {
  uchar dat;
  RST=0;                 //拉低RST
  SCLK=0;                //确保写数居前SCLK被拉低
  RST=1;                 //启动数据传输
  Write1302(Cmd);        //写入命令字
  dat=Read1302();        //读出数据
  SCLK=1;                //将时钟电平置于已知状态
  RST=0;                 //禁止数据传递

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-03-30 13:27  LCD数字时钟\
     文件       94333  2013-03-29 14:55  LCD数字时钟\Last Loaded lcd数字时钟.DBK
     文件       17303  2013-03-30 13:27  LCD数字时钟\LCDtimer.c
     文件       28353  2013-03-30 13:25  LCD数字时钟\LCDtimer.LST
     文件       25469  2013-03-30 13:25  LCD数字时钟\LCDtimer.OBJ
     文件       97607  2013-03-30 13:27  LCD数字时钟\lcd数字时钟.DSN
     文件         935  2013-03-30 13:27  LCD数字时钟\lcd数字时钟.PWI
     文件       21555  2013-03-30 13:25  LCD数字时钟\数字时钟
     文件        5183  2013-03-30 13:25  LCD数字时钟\数字时钟.hex
     文件          48  2013-03-30 13:25  LCD数字时钟\数字时钟.lnp
     文件       30721  2013-03-30 13:25  LCD数字时钟\数字时钟.M51
     文件        9072  2013-03-30 13:25  LCD数字时钟\数字时钟.plg
     文件       56284  2013-03-30 13:27  LCD数字时钟\数字时钟.uvopt
     文件       13253  2013-03-29 13:53  LCD数字时钟\数字时钟.uvproj
     文件       55777  2013-03-29 14:55  LCD数字时钟\数字时钟_uvopt.bak
     文件           0  2013-03-29 10:04  LCD数字时钟\数字时钟_uvproj.bak

评论

共有 条评论