#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar dd[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
//数码管断码表
uchar shi=9,fen=59,miao=55; //时间初始值
uchar shi1=10,fen1=5,miao1=0;//闹钟初始值
uchar yi,er,san,si,wu,liu,qi,ba;
uchar count=0;//计数变量
sbit led=P1^0; //LED端口
sbit buzz=P1^1;//蜂鸣器
sbit k1=P1^2; //模式切换
sbit k2=P1^3; //加
sbit k3=P1^4; //减
sbit k4=P1^5; //时间 时分秒切换
sbit k5=P1^6; //闹钟 时分秒切换
bit k1_flag=0;
uchar k4_flag=0,k5_flag=0;
void delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
//数码管显示时间
void display(uchar yi,uchar er,uchar san,uchar si,uchar wu,uchar liu,uchar qi,uchar ba)
{
P3=0x01; //位选
P2=dd[yi]; //段选
delay1ms();
P3=0x02;
P2=dd[er];
delay1ms();
P3=0x04; //位选
P2=dd[san]; //段选
delay1ms();
P3=0x08;
P2=dd[si];
delay1ms();
P3=0x10; //位选
P2=dd[wu]; //段选
delay1ms();
P3=0x20;
P2=dd[liu];
delay1ms();
P3=0x40; //位选
P2=dd[qi]; //段选
delay1ms();
P3=0x80;
P2=dd[ba];
delay1ms();
}
void keys()
{
if(k1==0)
{
delay1ms();
if(k1==0) //
{
k1_flag=~k1_flag;
if(k1_flag==0)
{ET0=1;}
}while(k1==0);
}
if(k2==0)
{
delay1ms();
if(k2==0) //
{
if(k4_flag==1)
{shi++;if(shi==24){shi=0;}}
if(k4_flag==2)
{fen++;if(fen==60){fen=0;}}
if(k4_flag==3)
{miao++;if(miao==60){miao=0;}}
if(k5_flag==1)
{shi1++;if(shi1==24){shi1=0;}}
if(k5_flag==2)
{fen1++;if(fen1==60){fen1=0;}}
if(k5_flag==3)
{miao1++;if(miao1==60){miao1=0;}}
}while(k2==0);
}
if(k3==0)
{
delay1ms();
if(k3==0) //
{
if(k4_flag==1)
{shi--;if(shi==-1){shi=23;}}
if(k4_flag==2)
{fen--;if(fen==-1){fen=59;}}
if(k4_flag==3)
{miao--;if(miao==-1){miao=59;}}
if(k5_flag==1)
{shi1--;if(shi1==-1){shi1=23;}}
if(k5_flag==2)
{fen1--;if(fen1==-1){fen1=59;}}
if(k5_flag==3)
{miao1--;if(miao1==-1){miao1=59;}}
}while(k3==0);
}
if(k4==0)
{
delay1ms();
if(k4==0) //
{
ET0=0;
if(k1_flag==0)
{
k4_flag++;
if(k4_flag==4)
{ET0=1;k4_flag=0;}
}
}while(k4==0);
}
if(k5==0)
{
delay1ms();
if(k5==0) //
{
ET0=0;
if(k1_flag==1)
{
k5_flag++;
if(k5_flag==4)
{k5_flag=0;}
}
}while(k5==0);
}
}
void Timer0Init(void) //100微秒@11.0592MHz
{
TMOD = 0x01; //设置定时器模式
TL0 =(65536-50000)%256; //设置定时初值
TH0 =(65536-50000)/256; //设置定时初值
TF0 = 1; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=1;
ET0=1;
}
void serviceTimer0Init() interrupt 1
{
TL0 =(65536-50000)%256; //设置定时初值
TH0 =(65536-50000)/256;
count++;
if(count==20) //20*50000=1秒
{
count=0;
miao++;
}
if(miao==60) //
{
miao=0;fen++;
}
if(fen==60) //
{
fen=0;shi++;
}
if(shi==24)
{shi=0;}
if((shi==shi1)&&(fen==fen1)&&(miao==miao1))
{
led=~led;buzz=0;
}
else
{
buzz=1;led=0;
}
}
//主函数
void main()
{
yi=1,er=2,san=3,si=4,
wu=5,liu=6,qi=7,ba=8;
Timer0Init();
led=0;buzz=1;
while(1)
{
if(k1_flag==0)
{
yi=shi/10,er=shi%10,san=10,si=fen/10,
wu=fen%10,liu=10,qi=miao/10,ba=miao%10;
}
else if(k1_flag==1)
{
yi=shi1/10,er=shi1%10,san=10,si=fen1/10,
wu=fen1%10,liu=10,qi=miao1/10,ba=miao1%10;
}
keys();
display(yi,er,san,si,wu,liu,qi,ba);
}
}
6465009304688052022-1-25 基于单片机的数码管闹钟设计.zip
需积分: 0 92 浏览量
更新于2023-06-01
收藏 92KB ZIP 举报
该项目是关于基于单片机的数码管闹钟设计,它涉及到电子工程、嵌入式系统以及数字电路等多个领域的知识。以下将对这个项目的关键技术点进行详细的解释。
1. **单片机基础**:单片机是微型计算机的一种,集成在单一芯片上,常用于控制各种设备。在这个项目中,单片机充当核心控制器,负责处理时间计算、闹钟设置、显示驱动等功能。常见的单片机有51系列、AVR、ARM等,具体使用哪种需要参考项目文件中的详细信息。
2. **数码管显示**:数码管是一种用于显示数字和简单字符的显示器,通常由七个或八个段组成(七段数码管和八段数码管)。在本设计中,数码管用于显示时间,单片机通过控制各个段的亮灭来形成不同的数字。
3. **时钟电路**:项目需要一个精确的时钟源,如晶振,为单片机提供稳定的时钟信号,以确保时间的准确计数。单片机会使用内部计数器根据时钟信号来计算时间。
4. **闹钟功能实现**:用户可以预设闹钟时间,单片机需要有存储和比较时间的能力。当当前时间与设定的闹钟时间匹配时,单片机会触发提醒,这可能通过蜂鸣器、LED闪烁或其他方式实现。
5. **用户交互界面**:设计可能包含按键输入,用于设置时间和开关闹钟。单片机需要处理这些输入,并根据用户的操作更新显示和功能。
6. **电源管理**:数码管闹钟通常需要持续工作,因此电源管理很重要。设计可能需要考虑低功耗模式,以延长电池寿命。
7. **软件开发**:单片机程序通常使用C或汇编语言编写,包括初始化设置、中断服务程序、主循环和各个功能模块。程序需要进行调试,确保所有功能正确无误。
8. **PCB设计与硬件组装**:项目的硬件部分包括单片机、数码管、时钟源、按键、电源等组件,需要设计并制作印刷电路板(PCB),然后进行焊接和组装。
9. **系统测试**:完成硬件组装和软件编程后,需要进行全面的功能测试,确保时间显示准确、闹钟设置和触发正常、用户交互顺畅。
10. **抗干扰措施**:考虑到电子设备可能受到电磁干扰,项目中可能需要加入滤波、屏蔽等抗干扰措施,以确保系统的稳定运行。
以上就是基于单片机的数码管闹钟设计的主要技术点,实际项目文件中应该包含了原理图、PCB布局、源代码、用户手册等详细资料,供学习者深入研究和实践。
2301_78400524
- 粉丝: 0
- 资源: 1
最新资源
- 036GraphTheory(图论) matlab代码.rar
- 038GreySystem灰色系统 matlab代码.rar
- 044微电网两阶段鲁棒优化经济调度方法Matlab代码.rar
- 039智能微电网PSO优化算法,比较全,推荐下载。matlab代码.rar
- 041微电网多目标调度,运用改进的多目标粒子群算法进行计算,里面包含经济等三个目标函数设置 matlab代码.rar
- 042Interpolation(目标规划、多元分析与插值的相关例子)Matlab代码.rar
- 043微电网two_stage robust optimization Matlab代码.rar
- 047二阶段法matlab matlab代码.rar
- 045风电场风速两参数weibull(威布尔)分布的MATLAB小程序 matlab代码.rar
- 046SOCPR-and-Linear-Disrflow-based-DNP-main matlab代码.rar
- 049超拉丁立方抽样matlab-latin-sampling Matlab代码.rar
- 051cnn-gru-attention(预测 Python程序).rar
- 048DDP_PowerSystem-master 不能运行.rar
- 054可用于光伏出力预测,引入气象影响因子,效果良好 matlab代码.rar
- 053对光伏出力预测的优化设计,实现了部分功能 matlab代码.rar
- 057在matlab中通过yalmip平台调用cplex求解器,可用于求解MILP问题,适合于综合能源系统优化求解 不能运行.rar