数码管显示DS1302

2026/1/19 15:49:20

/

#include #include

#define uchar unsigned char #define uint unsigned int

sbit beep=P3^5;

sbit ds1302_RST=P2^5; sbit ds1302_IO=P2^6; sbit ds1302_SCLK=P2^7;

sbit ACC0=ACC^0; sbit ACC7=ACC^7;

void init();

void delay_50us(uint t); void display();

uchar read_Byte();

void write_Byte(uchar tdata);

void write_data_ds1302(uchar taddr,uchar tdata); uchar read_data_ds1302(uchar taddr); void set_ds1302(uchar *P1302); void get_ds1302() ;

void init_ds1302();

uchar code table[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0xbf}; uchar initial_time[]={0x00,0x00,0x12};

// 秒 分 时 日 月uchar data now_time[3];

/******************************************/ /* 主函数 */ /******************************************/ void main() {

init();

周 年

init_ds1302();

set_ds1302(initial_time); while(1) {

get_ds1302(); display(); } }

/******************************************/ /* 延时子程序 */ /******************************************/ void delay_50us(uint t) {

uchar j; for(;t>0;t--)

for(j=19;j>0;j--); }

/******************************************/ /* 初始化子程序 */ /******************************************/ void init() {

P0=0xff; P2=0xff; P1=0x00; }

/******************************************/ /* 数码管显示子程序 */ /******************************************/ void display() {

uchar i; P1=0x01;

i=now_time[0]; //显示秒个 P0=table[i]; delay_50us(20);

P1=0x02;

i=now_time[0]/16; //显示秒十 P0=table[i]; delay_50us(20);

P1=0x04;

P0=table[10];//显示\ delay_50us(20);

P1=0x08;

i=now_time[1]; //显示分个 P0=table[i]; delay_50us(20);

P1=0x10;

i=now_time[1]/16; //显示分十 P0=table[i]; delay_50us(20);

P1=0x20;

P0=table[10]; //显示\ delay_50us(20);

P1=0x40;

i=now_time[2]; //显示时个 P0=table[i]; delay_50us(20);

P1=0x80;

i=now_time[2]/16; //显示时十 P0=table[i]; delay_50us(10); }

/*ds1302模块部分*/

/******************************************/ /* 读数据 */ /******************************************/ uchar read_Byte() {

uchar i;

for(i=8;i>0;i--) {

ACC=ACC>>1;

ACC7=ds1302_IO;//由于ds1302读数据的时候,第一个数据读取在发一个Byte命令后,在第八位的下降沿 ds1302_SCLK=1;

ds1302_SCLK=0;//产生下降沿输出一位数据 }

return(ACC); }

/******************************************/ /* 写字节 */ /******************************************/ void write_Byte(uchar tdata) {

uchar i; ACC=tdata; for(i=8;i>0;i--) {

ds1302_IO=ACC0; ds1302_SCLK=1;

ds1302_SCLK=0;//产生上升沿输入数据 ACC=ACC>>1; } }

/******************************************/ /* 写数据 */ /******************************************/ void write_data_ds1302(uchar taddr,uchar tdata)


数码管显示DS1302.doc 将本文的Word文档下载到电脑
搜索更多关于: 数码管显示DS1302 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219