历史上的今天
今天是:2025年01月07日(星期二)
2018年01月07日 | AT89S52控制DS1302时钟程序
2018-01-07 来源:eefocus
#include
/*************************ds1302与at89s52引脚连接********************/
sbit T_RST=P3^5;
sbit T_CLK=P3^6;
sbit T_IO=P3^7;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
unsigned char seg[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; //0~~9段码
/******************DS1302:写入操作(上升沿)*********************/
void write_byte(unsigned char da)
{
unsigned char i;
ACC=da;
for(i=8;i>0;i--)
{
T_IO=ACC0;
T_CLK=0;
T_CLK=1;
ACC=ACC>>1;
}
}
/******************DS1302:读取操作(下降沿)*****************/
unsigned char read_byte(void)
{
unsigned char i;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
T_CLK = 1;
T_CLK = 0;
ACC7 = T_IO;
}
return(ACC);
}
/******************DS1302:写入数据(先送地址,再写数据)***************************/
void write_1302(unsigned char addr,unsigned char da)
{
T_RST=0; //停止工作
T_CLK=0;
T_RST=1; //重新工作
write_byte(addr); //写入地址
write_byte(da);
T_RST=0;
T_CLK=1;
}
/******************DS1302:读取数据(先送地址,再读数据)**************************/
unsigned char read_1302(unsigned char addr)
{
unsigned char temp;
T_RST=0; //停止工作
T_CLK=0;
T_RST=1; //重新工作
write_byte(addr); //写入地址
temp=read_byte();
T_RST=0;
T_CLK=1; //停止工作
return(temp);
}
/***********************延时程序=a*1ms**************************************/
void delay(unsigned char a)
{
unsigned char i;
while(a-- !=0)
{
for(i=0;i<125;i++);
}
}
/***********************显示程序**********************************************/
/* 动态扫描条件(单个LED在1秒内): count >=50次 //点亮次数 */
/* time >=2ms //持续时间 */
/* DS1302秒,分,时寄存器是BCD码形式: 用16求商和余进行"高4位"和"低4位"分离 */
/* 0x00,0x10,0x30,0x40,0x60,0x70 : 位选 */
/****************************************************************************/
void led_disp(unsigned char *poi)
{
P0=seg[*poi % 16]; //第1个数码管:显示秒(个位);
delay(2); //持续2ms
P0=0xff; //消影
P0=seg[*poi /16]^0x10; //第2个数码管:显示秒(十位);
delay(2);
P0=0xff;
poi++;
P0=seg[*poi % 16]^0x30; //第4个数码管:显示分(个位)
delay(2);
P0=0xff;
P0=seg[*poi / 16]^0x40; //第5个数码管:显示分(十位)
delay(2);
poi++;
P0=0xff;
P0=seg[*poi % 16]^0x60; //第7个数码管:显示时(个位)
delay(2);
P0=0xff;
P0=seg[*poi /16]^0x70; //第8个数码管:显示时(十位)
delay(2);
P0=0xff;
}
/************************主程序**********************************************/
void main(void)
{
unsigned char clk_time[3]={0x00,0x00,0x12}; //秒,分,时寄存器初始值
unsigned char temp=0x80;
unsigned char i;
write_1302(0x8e,0x00); //WP=0 写操作
for(i=0;i<3;i++)
{
write_1302(temp,clk_time[i]);
temp+=2;
}
write_1302(0x8e,0x80); //WP=1 写保护
while(1)
{
led_disp(clk_time);
temp=0x81;
for(i=0;i<3;i++)
{
clk_time[i]=read_1302(temp);
temp+=2;
}
}
}
上一篇:PT16312VFD驱动C程序
下一篇:at89s51看门狗演示程序
史海拾趣
|
2007年全国大学生电子设计竞赛 基本仪器和主要元器件清单【更新08-30】 本帖最后由 paulhyde 于 2014-9-15 08:57 编辑 2007年全国大学生电子设计竞赛 基本仪器和主要元器件清单 1、基本仪器清单 20MHz普通示波器(双通道,外触发输入,有X轴输入,可选带Z轴输入) 60MHz双通道数字示波器 低频信号发生器(1Hz~ ...… 查看全部问答> |
|
前言: 洗尘机器人已经问世很多年了,而市场上也已经有多款洗尘机器人出售,价格从1000多人民币,到12000多人民币。当然功能上也有很多不同。最新的清洁机器人已经相当智能化,不但能根据您的需要来定时清洁,还能够在清洁过程中自行充电,然后待 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:14 编辑 现在很多资料,一些代理商 都倾向于把资料翻译成中文,这样可以更好地宣传推广 但是英语的瓶颈对于我们浏览国外电子类网站,了解国外的电子类行情,是个不小的阻碍 你觉得英语在电子设计中的比重有 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 全彩LED显示屏的最关键部件是LED器件。原因有三:第一,LED是全彩屏整机中使用数量最多的关键器件,每平方米会使用几千至几万只LED;第二,LED是决定整屏光学显示性能的主体,直接影响观众对显 ...… 查看全部问答> |
|
在加载LINUX内核的时,要对内核进行交叉编译,这个过程要需要等待很长的时间,移植内核后,如果内核太大,在启动的过程中要需要很长的时间去引导。在学习视频第三讲时,提出了几个可以优化内核的方法,对以后项目开发会比较有用。区域优化,主要包 ...… 查看全部问答> |
|
S3C6410由三星公司生产的ARM11应用处理器芯片,广泛用于移动电话和通用应用。市场上,很多公司纷纷推出自己的S3C6410学习开发板,风靡一时。处理器片内没有供用户存储数据的Flash,用户必须外接存储器存储数据。由表2. 1可知开发板唯一带有的存储介 ...… 查看全部问答> |




