⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e.txt

📁 基于52的DS1302和LCD1602的数字闹钟
💻 TXT
字号:


//**********头文件区************
#include<reg52.h>
#include<math.h>
#include<absacc.h>
#include<intrins.h>

//*********宏定义方便使用*******
#define uchar unsigned char
#define uint unsigned int


//*********定义变量区***********
sbit dula=P2^6;       //数码管段选
sbit wela=P2^7;       //数码管位选
sbit lcden=P3^4;      //LCD使能信号
sbit lcdrs=P3^5;      //LCD数据/命令选择信号

//uchar code tab_nie[]="Nie Jinbo";
uchar code tab_index[]="www.niejinbo.cn";
//uchar tab_num[]={0,1,2,3,4,5,6,7,8,9};
uchar tab_time[]={0,0,10,0,0,10,0,0};       //装时间转换数据
uchar code tab_char[]="0123456789:";       //
uchar code tab_chartime[]="Time ";

uchar count,hour=22,minu=58,sec=26;

//*********函数声明区***********
void lcd_dis();          //lcd显示函数
void lcd_init();         //LCD初始化函数
void write_com(uchar);   //写命令函数
void write_data(uchar); //写数据函数
void delay(uint);        //延时函数
void trans();            //时间转换函数
void write_char();       //写字符串函数
void int_time0();        //定时器0中断函数
void time();             //计时函数


//*********主函数开始***********
void main()
{
TMOD=0x01;     //定时器0方式1
EA=1;
ET0=1;
TH0=0xb8;      //20ms初值,11.0592MHZ
TL0=0X00;
TR0=1;

write_com(1);
lcd_init();
while(1)
{
time();
trans();
lcd_dis();
}
}

void int_time0() interrupt 1
{
TMOD=0x01;     //定时器0方式1
EA=1;
ET0=1;
TH0=0xb8;
TL0=0X00;   ////20ms初值,11.0592MHZ
TR0=1;
count++;
}

void time()
{
if(count>=50)   //20ms*50=1s
{
count=0;
sec++;
if(sec>=60)
{
   sec=0;
   minu++;
   if(minu>=60)
   {
    minu=0;
    hour++;
    if(hour>=24)
    {
     hour=0;
    }
   }
}
}
}


//*********时间转换函数开始*****
void trans()
{
tab_time[0]=hour/10;
tab_time[1]=hour%10;
tab_time[3]=minu/10;
tab_time[4]=minu%10;
tab_time[6]=sec/10;
tab_time[7]=sec%10;
}


//*********lcd显示函数开始******
void lcd_dis()
{
uchar m;
write_com(0x80+1);          //设置光标位置
for(m=0;m<5;m++)            //显示"Time "
{
write_data(tab_chartime[m]);
delay(2);
}
write_char();              //显示时间
write_com(0x80+0x40);      //设置光标位置为第二行
for(m=0;m<15;m++)          //显示"www.niejinbo.cn"
{
write_data(tab_index[m]);
delay(2);
}
}

//*********LCD初始化函数开始****
void lcd_init()
{
dula=0;
wela=0;      // 关闭数码管显示
lcden=0;
write_com(0x38);      //设置显示模式:16X2,5X7,8位数据接口
write_com(0x0c);      //开显示,显示光标,光标闪烁
write_com(0x06);      //读写一个字符后,地址指针及光标加一,且光标加一整屏显示不移动
write_com(0x80);      //设置光标指针
}

//*********写字符串函数开始*****
void write_char()
{
uchar n,a;
for(n=0;n<8;n++) 
{
a=tab_time[n];              //分别取时分秒十个位数字
write_data(tab_char[a]);    //显示对应数字符号
}
} 

//*********写命令函数开始*******
void write_com(uchar com)
{
lcdrs=0;      //低电平写命令
P0=com;       //写入命令
delay(3);     //延时约3ms
lcden=1;      //LCD使能端置高电平
delay(5);     //延时约5ms
lcden=0;      //LCD使能端拉低电平
}

//*********写数据函数开始*******
void write_data(uchar dat)
{
lcdrs=1;      //低电平写数据
P0=dat;       //写入命令
delay(3);     //延时约3ms
lcden=1;      //LCD使能端置高电平
delay(5);     //延时约5ms
lcden=0;      //LCD使能端拉低电平
}

//*********延时函数开始*********
void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
   for(j=110;j>0;j--);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -