6位数码管电子时钟c语言程序,51单片机六位显示数码管时钟制作(带闹钟设置,源码,原理图)...

这篇博客介绍了一个使用51单片机和C语言编写的6位数码管电子时钟程序,包括时钟显示、闹钟设置和蜂鸣器功能。通过设置P1口的各个位来控制数码管和按键,实现时间的动态扫描显示、设置及闹钟功能。
摘要由CSDN通过智能技术生成

#include

#define uint  unsigned int

#define uchar unsigned char

sbit WE1=P2^5;

sbit WE2=P2^4;

sbit WE3=P2^3;

sbit WE4=P2^2;

sbit WE5=P2^1;

sbit WE6=P2^0;

sbit K1=P1^0;   //设置小时位

sbit K2=P1^1;   //设置分位

sbit K3=P1^2;   //设置秒位

sbit K4=P1^3;   //进入时间设置

sbit K5=P1^4;   //进入闹钟设置

sbit K6=P1^5;   //退出设置

sbit BZ=P1^6;  //蜂鸣器接口

uchar code table[]={

0XC0,0XF9,0XA4,

0XB0,0X99,0X92,

0X82,0XF8,0X80,

0X90};

uint tt=0,i=0,j=0,T=0,R=0,S;

uint W1=0,W2=0,W3=0,W4=0,W5=0,W6=0;      //当前时间位,依次接P0口即可,即W1=P0^0,W2=P0^2.....以此类推

uint WD1=0,WD2=0,WD3=0,WD4=0,WD5=0,WD6=0;  //闹钟时间位,用于储存设置的闹钟时间,不接

void delay(uint);  //软延时

//void delay1(uint);

void js(void);  //时钟进位定义

void key(void); //按键

void XS(uint,uint,uint,uint,uint,uint);  //动态扫描数码管显示

void xhsz(uint,uint,uint,uint,uint,uint,uint);  //时钟位设置函数

void main()

{

P1=0X0;

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的6数码管电子时钟C语言程序,可以在51单片机上运行: ```c #include <reg51.h> // 导入51单片机头文件 #define uchar unsigned char // 定义无符号字符类型 sbit DIO=P1^0; // 定义数码管数据线 sbit CLK=P1^1; // 定义数码管时钟线 sbit LATCH=P1^2; // 定义数码管锁存线 uchar code NumTab[]={ // 数码管显示数字编码数组 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; uchar hour=0,min=0,sec=0; // 定义小时、分钟、秒钟变量 void delay_ms(unsigned int ms) // 延时函数,单毫秒 { unsigned int i,j; for(i=0;i<ms;i++) for(j=0;j<110;j++); } void WriteData(uchar dat) // 向数码管写入数据 { uchar i; for(i=0;i<8;i++) { CLK=0; DIO=dat&0x01; dat>>=1; CLK=1; } } void Display(uchar *p) // 在数码管显示时间 { uchar i; LATCH=0; for(i=0;i<6;i++) { WriteData(NumTab[*(p+i)]); } LATCH=1; } void InitTimer() // 初始化定时器 { TMOD=0x01; // 定时器1,工作模式1 TH0=0x4c; // 初始值,每50ms中断一次 TL0=0x00; TR0=1; // 启动定时器 ET0=1; // 允许定时器1中断 EA=1; // 允许总中断 } void Timer0() interrupt 1 // 定时器1中断处理函数 { TH0=0x4c; // 重新赋初值 TL0=0x00; sec++; // 秒加1 if(sec==60) // 如果秒钟达到60 { sec=0; min++; // 分钟加1 if(min==60) // 如果分钟达到60 { min=0; hour++; // 小时加1 if(hour==24) // 如果小时达到24 { hour=0; // 回到0点 } } } } void main() // 程序入口 { InitTimer(); // 初始化定时器 while(1) // 无限循环 { uchar time[6]={hour/10,hour%10, // 将时间转换成数码管显示的数字 min/10,min%10, sec/10,sec%10}; Display(time); // 在数码管显示时间 delay_ms(5); // 延时5ms } } ``` 这个程序使用了定时器中断来实现时间的计时和更新,在每秒钟定时器中断处理函数中将秒、分、时加1,然后将时间转换成数码管显示的数字,最后在数码管显示程序中使用了一个延时函数来控制数码管的刷新频率,可以根据需要调整该延时时间。 关于仿真,您可以使用Proteus等仿真软件进行仿真。在仿真中,您需要添加51单片机、6数码管等元件,并将单片机程序烧录到单片机中。然后运行仿真,观察数码管上的时间变化是否与预期一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值