51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能)
首先展示硬件设计部分,此处采用proteus仿真演示。其中液晶屏上面一行显示的是实际时间,下面一行显示的是设定闹钟时间。通过调节单刀双掷开关来改变正在调整的时间是实际时间还是闹钟时间。下面的三个按键依次用来调节模式(模式即正在调节的量是时、分或秒,通过最上面的三个LED灯来表达出来),下面的两个按键分别用来进行加减一的操作。
以上是硬件设计部分,下面展示软件部分代码。
1、变量及函数定义
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar data Set[4]={
'S','e','t',':'};//初始显示
uchar data Rel[4]={
'R','e','l',':'};//初始显示
uchar data rel_time[8]={
'0','0','-','0','0','-','0','0'};//初始显示
uchar data set_time[8]={
'0','3','-','0','5','-','0','0'};//初始显示
/*液晶的使能、读写端定义*/
sbit lcden=P2^2;
sbit lcdrs=P2^1;
sbit lcdrw=P2^0;
/*按键定义*/
sbit keymode=P2^7;
sbit keyadd=P2^6;
sbit keysub=P2^5;
sbit cho=P2^3;//开关定义
/*LED定义*/
sbit ledsec=P3^7;
sbit ledmin=P3^6;
sbit ledhour=P3^5;
sbit bee=P2^4;//蜂鸣器定义
uchar i=20;
uchar j;
uchar mode;
uchar choose;
uchar rel_sec=0,rel_min=0,rel_hour=0;
uchar set_sec=0,set_min=5,set_hour=3;
/*函数清单*/
void delay(uint x); //该延时大约100us
void baoshi(); //报时函数
void comp(); //闹钟函数,对实际值和设定闹钟值进行比较
void dis(); //显示函数
void Key(); //按键函数
/*液晶显示有关函数*/
void LCDdelay(uint x);//LCD延时函数
void write_com(uchar lcdcom);//写命令
void write_data(uchar lcddate);//写数据
void Init1602();//
2、与液晶显示有关的各种函数
void LCDdelay(uint x) //该延时大约100us(不精确,液晶操作的延时不要求很精确)
{
uchar j;
while(x--)
for(j=0;j<120;j++);
}
//写命令
void write_com(uchar lcdcom)
{
lcdrs=0;
lcdrw=0;
P1=lcdcom;
LCDdelay(5);
lcden=1;
LCDdelay(5);
lcden=0;
}
//写数据
void write_data(uchar lcddate)
{
lcdrs=1;
lcdrw=0;
P1=lcddate;
LCDdelay(5);
lcden=1;
LCDdelay(5);
lcden=0;
}
//1602初始化
void Init1602()
{
lcden=0;
write_com(0x38);//屏幕初始化
write_com(0x0c);//打开显示 无光标 无光标闪烁
write_com(0x06);//当读或写一个字符是指针后一一位
write_com(0x01);//清屏
write_com(0x80+2);
for(j=0;j<4;j++){
write_data(Rel[j]);
LCDdelay(5);
}
write_com(0x80+0x40+2);
for(j=0;j<4;j++){
write_data(Set[j]);
LCDdelay(5);
}
write_com(0x80+6);
for(j=0;j<8;j++){
write_data(rel_time[j]);
LCDdelay(5);
}
write_com(0x80+0x40+6);
for(j=0;j<8;j++){
write_data(set_time[j]);
LCDdelay(5);
}
}
3、其他各定时、调节等函数(电子钟功能实现)
/*定时1s*/
void timer0()interrupt 1
{
TH0=15536/256;
TL0=15536%256;
i--;
if(i==0){
i=20;
rel_sec++;
if(rel_sec==60){
rel_sec=0;
rel_min++;
if(rel_min==60)
{
rel_min=0;
rel_hour++;
if(rel_hour==24){
rel_hour=0;
}
}
}
Key();
comp();
baoshi();
dis();
}
}
void dis(){
rel_time[0]=rel_hour/10;
rel_time[1]=rel_hour%10;
rel_time[2]='-'-0x30;
rel_time[3]=rel_min/10;
rel_time[4]=rel_min%10;
rel_time[5]='-'-0x30;
rel_time[6]=rel_sec/10;
rel_time[7]=rel_sec%10;
set_time[0]=set_hour/10;
set_time[1]=set_hour%10;
set_time[2]='-'-0x30;
set_time[3]=set_min/10;
set_time[4]=set_min%10;
set_time[5]='-'-0x30;
set_time[6]=set_sec/10;
set_time[7]=set_sec%10;
write_com(0x80+6);
for(j=0;j<8;j++){
write_data(rel_time[j]+0x30);
LCDdelay(5);
}
write_com(0x80+0x40+6);
for(j=0;j<8;j++){
write_data(set_time[j]+0x30);
LCDdelay(5);
}
}
void Key(){
if(keymode==0){
mode++;
if(mode==4)
mode=1;
}
if(mode==1){
ledsec=1;
ledmin=0;
ledhour=0;
}
if(mode==2){
ledsec=0;
ledmin=1;
ledhour=0;
}
if(mode==3){
ledsec=0;
ledmin=0;
ledhour=1;
}
if(cho==0){
choose=0;
}
else{
choose=1;
}
if(keyadd==0){
if(mode==1){
if(choose==0){
rel_sec++;
if(rel_sec==60){
rel_sec=0;
}
}
else{
set_sec++;
if(set_sec==60){
set_sec=0;
}
}
}
else if(mode==2){
if(choose==0){
rel_min++;
if(rel_min==60){
rel_min=0;
}
}
else{
set_min++;
if(set_min==60){
set_min=0;
}
}
}
if(mode==3){
if(choose==0){
rel_hour++;
if(rel_hour==24){
rel_hour=0;
}
}
else{
set_hour++;
if(set_hour==24){
set_hour=0;
}
}
}
}
if(keysub==0){
if(mode==1){
if(choose==0){
if(rel_sec==0){
rel_sec=59;
}
else
rel_sec--;
}
else{
if(set_sec==0){
set_sec=59;
}
else
set_sec--;
}
}
else if(mode==2){
if(choose==0){
if(rel_min==0){
rel_min=59;
}
else
rel_min--;
}
else{
if(set_min==0){
set_min=59;
}
else
set_min--;
}
}
if(mode==3){
if(choose==0){
if(rel_hour==0){
rel_hour=23;
}
else
rel_hour--;
}
else{
if(set_hour==0){
set_hour=23;
}
else
set_hour--;
}
}
}
}
void delay(uint x) //该延时大约100us
{
uchar j;
while(x--)
for(j=0;j<120;j++);
}
void baoshi(){
if(rel_min==0&&rel_sec==1){
bee=1;
delay(500);
bee=0;
}
}
void comp(){
if(rel_hour==set_hour&&rel_min==set_min&&rel_sec==set_sec+1)
{
bee=1;
delay(1000);
bee=0;}
}
4、主函数
void main() {
cho=0;
bee=0;
ledsec=0;
ledmin=0;
ledhour=0;
mode=1;
keymode=1;
keyadd=1;
Init1602();
TMOD=0X01;
TH0=15536/256;
TL0=15536%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
基于以上,即可实现51单片机数字电子钟的设计,全部代码及仿真文件下载链接:https://download.csdn.net/download/creampang/85674151?spm=1001.2014.3001.5503
文章浏览阅读2.3k次。介绍一个python的图形化界面,wxpython。 wxpython是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。 wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32/64位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS_wxpython 调用窗口控件
文章浏览阅读405次。(软件下载方式在文末)自从 PanDownload 被处理之后一直没有超越它的可替代的应用出来但是最近,竟然有人接盘了!重新制作上线推出了更加强劲的复活版!放张图,大家先感受下60MB/..._.较好的容灾处理(眼神暗示)
文章浏览阅读5.2k次。最近熊猫烧香肆虐,WC里CIM那群人集体中招,俺的机子裸奔竟然也没事,呵呵。刚好python的邮件列表上有人给“熊猫”玩文字游戏,觉得特有意思,拿出来和大家分享一下 。 床前明月光,熊猫在烧香。专杀杀不尽,两眼泪汪汪。 熊猫烧不尽,关机开又生。 宝剑锋从磨砺出,熊猫香自网上来。 无边香火烧烧下,不尽熊猫滚滚来。身心俱疲终不悔,为猫烧得人憔悴。 相见时难杀亦难,熊猫烧
文章浏览阅读7.8k次。前端时间参加了公司的管理培训,讲非职权影响力。对于领导者来讲,如果不能提高自己的影响力,那么是没办法做到让下属信服和追随的。整理了一下培训的收获。 影响力的定义运用一些别人所乐于接受的方式,改变他人的思想和行动,具体有个性、思想,以及行动。这些方式包括:举例引证、造成恐惧、赞美肯定、权势财富等。 影响力的6大武器互惠 承诺一致 社会认同 喜好 权威 稀缺另外次要..._职权影响力
文章浏览阅读765次,点赞2次,收藏7次。先放个效果图吧制作记事本一共分为五个部分。1、第一部分就是添加内容。目的是输入内容后按下enter能够在目录下出现对应的内容,此部分应用v-for,v-model以及v-text完成,html程序如下<div id="app"> <input id="text" type="text" v-model="addValue" @keyup.enter="add" placeholder="请输入内容"> <ul> <li v-f_vue选中文字做笔记
文章浏览阅读1k次,点赞2次,收藏9次。反序列化
文章浏览阅读997次。[root@platform-103 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 252:0 0 60G 0 disk├─vda1 252:1 0 500M 0 part /boo..._linux重启后盘符交换
文章浏览阅读1.8k次,点赞3次,收藏15次。目录散列表散列函数哈希冲突开放地址法线性探测二次探测双重散列链表法装载因子散列表 前面数组、链表、栈、队列都是序列式容器,存储的都是一个元素。而散列表又叫哈希表(hash table),是一种关联式容器,存储的是一对值,一般是一个key对应一个value(又叫键值对)。 c++ stl中的map就是一个散列表,举个例子:std::map<std::string,int> m;m["小明"]=170;std::cout<<"小明的身高是"<<m["小明"]&_设计算法,将数组a 进行散列存储,以解决
文章浏览阅读8k次,点赞4次,收藏26次。它作为可以将域名和IP地址相互映射的一个分布式数据库,是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的系统,搭载域名系统的机器称之为域名服务器,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串。,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。..._域名
文章浏览阅读3.3k次。点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达本文转载自:AI人工智能初学者Rethinking BiSeNet For Real-time Semantic Seg..._语义分割的fps
文章浏览阅读6.6k次,点赞2次,收藏27次。 根据网络资源整合了一份, 并开发了自己的demo。http://download.csdn.net/detail/zdw86/9833470 一、添加控件(一)创建工程 (二)插入控件 (三)添加类 点完确认之后,要等很长一段时间.期间不要触碰VC++6.0否则程序..._vc 6.0 teechart8
文章浏览阅读888次,点赞8次,收藏23次。1.背景介绍分布式系统是现代计算机系统的基础设施之一,它允许多个计算节点在网络中协同工作。随着分布式系统的发展和应用,数据一致性问题变得越来越重要。在分布式计算中,数据一致性是指在分布式系统中的多个节点能够同步获取和更新相同的数据,以确保数据的一致性。在分布式系统中,数据一致性问题主要由于节点之间的异步通信和故障导致的数据不一致。为了解决这个问题,人们提出了一种称为Paxos和Raft的一...