四位共阳极数码管显示函数_DS1302,四位共阳极数码管显示时钟,可调时间

本文档介绍了一个使用DS1302实时时钟芯片的驱动程序,实现了四位共阳极数码管的显示功能,用于显示时钟时间,并提供了按键调整时间的功能。程序中包含了数码管的段选和位选定义,以及DS1302的读写函数和中断服务程序,用于实时更新显示和时间调整。
摘要由CSDN通过智能技术生成

#include

#define uchar unsigned char

#define uint unsigned int

#define D P1   //段选

#define W P2   //位选

sbit IO=P3^3;   //数据口

sbit SCLK=P3^4;   //控制数据时钟

sbit RST=P3^2;    //使能端、复位端

sbit w1=P2^4 ;

/************按键引脚定义***********/

sbit s1=P3^5; //按键 加

sbit s2=P3^6; //按键 减

sbit s3=P3^7;   //按键 选择

sbit led=P2^3; //闪烁的小数点

uchar s, knum=0,snum,fnum;

bit flag;

/***********写时分秒地址************/

#define write_shi  0x84

#define write_fen  0x82

#define write_miao 0x80

/***********读时分秒地址************/

#define read_shi  0x85

#define read_fen  0x83

#define read_miao 0x81

bit miao_flag;

char miao_num;

char Dmiao;

char shi,fen,miao;  //读出数据存储变量

uchar d[]={0Xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};  //段选

void delay(uint z)         //延时函数,z的取值为这个函数的延时ms数,如                                                                        delay(200);大约延时200ms.

{            //delay(500);大约延时500ms.

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void t0_init()  //定时50ms一个中断

{

TMOD=0X01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在51单片机电子秤设计中,使用74hc595芯片控制4位阳极数码管的段选和位选,可以按照以下步骤进行操作: 1. 连接74hc595芯片和4位阳极数码管,将74hc595芯片的Q0~Q7引脚连接到数字管的a~dp引脚,Q7'引脚连接到位选锁存器输入引脚ST_CP,SER引脚连接到51单片机的输出引脚,OE引脚接高电平。 2. 在程序中定义74hc595芯片的引脚,设置数码管显示的数字和位置,将数字和位置依次存入数组中。 3. 通过移位操作将数组中的数字和位置依次输出到74hc595芯片,控制数码管显示。 下面是基于Keil C编写的示例代码: ```c #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit DS=P1^0; //定义74hc595数据引脚 sbit SHCP=P1^1;//定义74hc595移位时钟引脚 sbit STCP=P1^2;//定义锁存时钟引脚 uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义0~9的显示码 void delay(uint z){//延时函数 uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void HC595SendByte(uchar dat){//发送一个字节到74hc595芯片 uchar i; SHCP=0; STCP=0; for(i=0;i<8;i++){ DS=dat&0x80; dat<<=1; SHCP=1; SHCP=0; } STCP=1; STCP=0; } void main(){ uchar i,j; uchar dis_buf[4]={0}; //定义显示缓冲区 while(1){ for(i=0;i<4;i++){ dis_buf[i]=i; //将显示位置依次存入缓冲区 for(j=0;j<10;j++){ dis_buf[(i+1)%4]=j; //将下一个位置的数字依次存入缓冲区 HC595SendByte(0xfe>>(i)); //输出位选,控制向哪个数码管输出 HC595SendByte(num[dis_buf[i]]); //输出数字 delay(10); //延时10ms,刷新频率为100Hz } } } } ``` 在上述代码中,使用dis_buf数组存储4个数码管显示的数字,通过移位操作控制74hc595芯片输出数字和位置,从而控制数码管显示。延时10ms后,刷新下一个数码管的显示,实现数码管动态显示的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值