完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
数码管是共阳的,
|
|
|
|
可惜没有比了
|
|
|
|
,很厉害,看看
|
|
|
|
|
|
#include
/*************************ds1302与at89s52引脚连接********************/ ***it T_RST=P1^4; //RST脚接P3^6 ***it T_CLK=P3^6; //CLK脚接P3^5 ***it T_IO=P3^7; //IO脚接P3^4 /*************************定义数码管显示引脚*************************/ ***it LED_0=P1^4; //数码管8个控制引脚定义 ***it LED_1=P1^5; ***it LED_2=P1^0; ***it LED_3=P1^1; ***it LED_4=P1^2; ***it LED_5=P1^3; ***it LED_6=P1^6; ***it LED_7=P1^7; ***it ACC0=ACC^0; //定义标志位 ***it ACC7=ACC^7; unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~~9段码 void delay(unsigned char a); //延时函数声明 /******************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; //delay(1); 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<80;i++); } } /***********************显示程序**********************************************/ /* 动态扫描条件(单个LED在1秒内): count >=50次 //点亮次数 */ /* time >=2ms //持续时间 */ /* DS1302秒,分,时寄存器是BCD码形式: 用16求商和余进行"高4位"和"低4位"分离 */ /* */ /****************************************************************************/ void led_disp(unsigned char *poi) { P0=seg[*poi % 16]; //第1个数码管:显示秒(个位); LED_5=0; delay(3); LED_5=1; P0=seg[*poi /16]; //第2个数码管:显示秒(十位); LED_4=0; delay(3); LED_4=1; P0=seg[*(poi+1) % 16]; //第4个数码管:显示分(个位) LED_3=0; delay(3); LED_3=1; P0=seg[*(poi+1) / 16]; //第5个数码管:显示分(十位) LED_2=0; delay(3); LED_2=1; P0=seg[*(poi+2) % 16]; //第7个数码管:显示时(个位) LED_1=0; delay(3); LED_1=1; P0=seg[*(poi+2) /16]; //第8个数码管:显示时(十位) LED_0=0; delay(3); LED_0=1;/**/ } /************************主程序**********************************************/ void main(void) { unsigned char clk_time[3]={0x00,0x00,0x12}; //秒,分,时寄存器初始值 unsigned char temp=0x80; unsigned char i; //数组序号 delay(300); write_1302(0x8e,0x00); //WP=0 写操作 for(i=0;i<3;i++) { write_1302(temp,clk_time); temp+=2; //delay(300); } write_1302(0x8e,0x80); //WP=1 写保护 //delay(300); while(1) { led_disp(clk_time); //发送时间到数码管显示 temp=0x81; for(i=0;i<3;i++) { clk_time=read_1302(temp); //实现每秒读时间 temp+=2; } } } ds1302显示时间的程序 |
|
|
|
斯蒂芬热土和干部
|
|
|
|
数码管是共阳的,
|
|
|
|
bucuo
|
|
|
|
我以为是1.8寸的数码管,不过谢谢
|
|
|
|
学习一下,谢谢楼主分享,辛苦了
|
|
|
|
|
|
|
|
谢谢分享谢谢分享谢谢分享
|
|
|
|
谢谢分享谢谢分享谢谢分享
|
|
|
|
|
|
|
|
谢谢分享的好资料
|
|
|
|
謝謝下載練習.......................
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
280 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1083 浏览 0 评论
846 浏览 0 评论
886 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
869 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11824 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 10:07 , Processed in 1.170459 second(s), Total 73, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号