当前位置: 首页 > news >正文

基于AVR128单片机世界电子时钟的设计

一、系统方案
上电初始化完成系统初始化,液晶滚动显示北京、莫斯科、东京、伦敦、巴黎、纽约等六个城市的标准时间,显示的内容包括地区名及相应地区的年、月、日、星期、时、分、秒。
使用K1按键控制滚动显示或稳定显示某个地区的时间。
使用K3、K4、K5按键可进行时间和日期的设定。在进行年、月、日、时、分、秒的调整时,被选中的调节对象能闪烁显示。
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述
三、单片机软件设计
1、首先是系统初始化
unsigned char set_mode=0;
short time_offset=0;
unsigned char last_display_flag;
unsigned char i =0,set_obj=0;
CLI(); //disable all interrupts
PORTA = 0xFF;
DDRA = 0x00;//输入
PORTB = 0xFF;//低电平
DDRB = 0x00;//输入
PORTC = 0xFF;//低电平
DDRC = 0xFF;//输出
PORTE = 0xFF;
DDRE = 0xff;//输出
PORTD = 0xff;
DDRD = 0xFF;//输出
PORTD = 0xff;
PORTF = 0xFF;
DDRF = 0xFF;//输出
PORTG = 0xFF;
DDRG = 0xFF;//输出

LCD12864_Init();XDIV  = 0x00; //xtal divider
XMCRA = 0x00; //external memory
MCUCR = 0x00;
TCCR0 = (1<<CS02)|(1<<CS01);//T/C0工作于定时方式,系统时钟256分频
TCNT0 = 0x00;    //计数初值
TIMSK = 0x11; //timer interrupt sources
SEI();  //使能全局中断 //initial_ds1302();

2、液晶显示程序

void SendCommand(unsigned char command)
{
CheckState();
LGM12864_CLR_RS;
LGM12864_CLR_RW;
LCDa_DO = command;
delay_nus(2);
LGM12864_SET_EN;
delay_nus(2);
LGM12864_CLR_EN;
}

unsigned char LCD12864_RecData()
{
unsigned char temp;
CheckState();
LGM12864_SET_RS;
LGM12864_SET_RW;
LGM12864_SET_EN;
temp=LCDa_DI;
LGM12864_CLR_EN;

return (temp);

}
3、按键程序
if((PINA&0x01) == 0x00)
{
delay_nms(50);
while((PINA&0x01) == 0x00);
work_mode++;
if(work_mode>2)
{
work_mode = 0;
}
}
else if((PINA&0x02) == 0x00)
{
delay_nms(50);
while((PINA&0x02) == 0x00);
display_flag++;
if(display_flag>7)
{
display_flag=0;
}
}
else if((PINA&0x04) == 0x00)
{
delay_nms(50);
while((PINA&0x04) == 0x00);
work_mode=2;
display_flag=1;
set_obj++;
if(set_obj>8)
{
//work_mode=0;
set_obj=0;
initial_ds1302();
}
}
else if((PINA&0x08) == 0x00)
{
delay_nms(50);
while((PINA&0x08) == 0x00);
set_mode++;
if(set_mode>=2)
{
set_mode=0;
}
}
4、核心算法程序
if((display_flag != last_display_flag)||(work_mode0x02)||(work_mode0x01))
{
last_display_flag = display_flag;
if(display_flag==0)
{
LCD12864_Show_16_16(3,0,Title_Font_Arrary[0]);
LCD12864_Show_16_16(4,0,Title_Font_Arrary[1]);
LCD12864_Show_16_16(5,0,Title_Font_Arrary[2]);
}
else
{
LCD12864_Show_16_16(3,0,Title_Font_Arrary[3+(display_flag-1)*2]);
LCD12864_Show_16_16(4,0,Title_Font_Arrary[3+(display_flag-1)*2+1]);
LCD12864_Show_16_16(5,0,Title_Font_Arrary[13]);
}
ds1302_dec_data.second = H_D(ds1302_data.second);
ds1302_dec_data.minute = H_D(ds1302_data.minute);
ds1302_dec_data.hour = H_D(ds1302_data.hour)+time_offset;
ds1302_dec_data.week = H_D(ds1302_data.week);
ds1302_dec_data.day = H_D(ds1302_data.day);
ds1302_dec_data.month = H_D(ds1302_data.month);
ds1302_dec_data.year = H_D(ds1302_data.year);

		LCD12864_Show_8_16(0,1,Number_Font_Arrary[2]);LCD12864_Show_8_16(1,1,Number_Font_Arrary[0]);for(i=0;i<3;i++){LCD12864_Show_8_16(2+i*3,1,Number_Font_Arrary[(*(&ds1302_dec_data.year+i))/10%10]);LCD12864_Show_8_16(3+i*3,1,Number_Font_Arrary[(*(&ds1302_dec_data.year+i))%10]);if(i!=2)LCD12864_Show_8_16(4+i*3,1,TIME_Font_Arrary[0]);}for(i=0;i<3;i++){LCD12864_Show_8_16(0+i*3,2,Number_Font_Arrary[(*(&ds1302_dec_data.hour+i))/10%10]);LCD12864_Show_8_16(1+i*3,2,Number_Font_Arrary[(*(&ds1302_dec_data.hour+i))%10]);if(i!=2)LCD12864_Show_8_16(2+i*3,2,TIME_Font_Arrary[0]);}LCD12864_Show_8_16(0,3,Number_Font_Arrary[ds1302_dec_data.week/10%10]);LCD12864_Show_8_16(1,3,Number_Font_Arrary[ds1302_dec_data.week%10]);if(set_obj>0){delay_nms(200);if(set_obj<=0x03){LCD12864_Show_Anti_White_8_16(2+(set_obj-1)*3,1,Number_Font_Arrary[(*((unsigned char*)&ds1302_dec_data.year+set_obj-1))/10%10]); LCD12864_Show_Anti_White_8_16(3+(set_obj-1)*3,1,Number_Font_Arrary[(*((unsigned char*)&ds1302_dec_data.year+set_obj-1))%10]); }else if(set_obj<=0x04)	{LCD12864_Show_Anti_White_8_16(0,3,Number_Font_Arrary[ds1302_dec_data.week/10%10]); LCD12864_Show_Anti_White_8_16(1,3,Number_Font_Arrary[ds1302_dec_data.week%10]); }else if(set_obj<=0x07){LCD12864_Show_Anti_White_8_16(0+(set_obj-5)*3,2,Number_Font_Arrary[(*((unsigned char*)&ds1302_dec_data.year+set_obj-1))/10%10]); LCD12864_Show_Anti_White_8_16(1+(set_obj-5)*3,2,Number_Font_Arrary[(*((unsigned char*)&ds1302_dec_data.year+set_obj-1))%10]); }}}//}

四、proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

相关文章:

基于AVR128单片机世界电子时钟的设计

一、系统方案 上电初始化完成系统初始化&#xff0c;液晶滚动显示北京、莫斯科、东京、伦敦、巴黎、纽约等六个城市的标准时间&#xff0c;显示的内容包括地区名及相应地区的年、月、日、星期、时、分、秒。 使用K1按键控制滚动显示或稳定显示某个地区的时间。 使用K3、K4、K5按…...

Electron学习2 使用Electron-vue和Vuetify UI库

Electron学习2 使用Electron-vue和Vuetify UI库 一、Electron-vue简介二、安装yarn三、创建Electron-vue项目1. 关于 electron-builder2. 安装脚手架3. 运行4. 打包应用程序 四、background.js说明1. 引入模块和依赖&#xff1a;2. 注册协议&#xff1a;3. 创建窗口函数&#x…...

Java“牵手”根据商品分类ID获取速卖通商品分类详情页面数据获取方法,速卖通API实现批量商品数据抓取示例

速卖通商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取速卖通商品分类详情和商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问速卖通商城的网页来获取商品分类详情信息。以下…...

QT 使用图表

目录 1、概念 1.1 坐标轴-QAbstractAxis 1.2 系列-QAbstractSeries 1.3 图例-Legend 1.4 图表-QChart 1.5 视图-QChartView 2、 QT 折线图 2.1 Qt 折线图介绍 2.2 Qt 折线图实现 Qt 图表是专门用来数据可视化的控件 Qt 图表包含折线、饼图、棒图、散点图、范围图等。…...

SSRF 服务器端请求伪造

文章目录 SSRF(curl)网址访问通过file协议访问本地文件dict协议扫描内网主机开放端口 SSRF(file_get_content)网站访问http协议请求内网资源通过file协议访问本地文件 SSRF(Server-Side Request Forgery:服务器端请求伪造) 其形成的原因大都是由于服务端提供了从其他服务器应用…...

shell 05(shell索引数组变量)

一、数组 shell 支持数组 (Array)&#xff0c;数组是若干数据的集合&#xff0c;其中的每一份数据都称为数组的元素. 注意Bash shell 只支持一维数组&#xff0c;不支持多维数组。 在 Shell 中&#xff0c;用括号( )来表示数组&#xff0c;数组元素之间用空格来分隔. 语法为&…...

爬虫异常处理:异常捕获与容错机制设计

作为一名专业的爬虫程序员&#xff0c;每天使用爬虫IP面对各种异常情况是我们每天都会遇到的事情。 在爬取数据的过程中&#xff0c;我们经常会遇到网络错误、页面结构变化、被反爬虫机制拦截等问题。在这篇文章中&#xff0c;我将和大家分享一些关于如何处理爬虫异常情况的经…...

Python自动化小技巧21——实现PDF转word功能(程序制作)

案例背景 为什么这个年代PDF转word&#xff0c;某wps居然还要收费.....很多软件都可以实现这个功能&#xff0c;但是效果都有好有坏&#xff0c;而且有的还付费&#xff0c;很麻烦。 那就用python实现这个功能吧&#xff0c;然后把代码打包为.exe的程序&#xff0c;这样随便在…...

Vue使用Element的表格Table显示树形数据,多选框全选无法选中全部节点

使用Element的组件Table表格&#xff0c;当使用树形数据再配合上多选框&#xff0c;如下&#xff1a; 会出现一种问题&#xff0c;点击左上方全选&#xff0c;只能够选中一级树节点&#xff0c;子节点无法被选中&#xff0c;如图所示&#xff1a; 想要实现点击全选就选中所有的…...

SpringBoot生成和解析二维码完整工具类分享(提供Gitee源码)

前言&#xff1a;在日常的开发工作当中可能需要实现一个二维码小功能&#xff0c;我参考了网上很多关于SpringBoot生成二维码的教程&#xff0c;最终还是自己封装了一套完整生成二维码的工具类&#xff0c;可以支持基础的黑白二维码、带颜色的二维码、带Logo的二维码、带颜色和…...

Redis的基本知识(偏八股)

前言 本文篇概念&#xff0c;着重介绍Redis的执行效率、功能作用、数据类型、 执行效率 江湖上都流传这Redis的执行效率是挺快的&#xff0c;那为什么说它快呢&#xff1f;有以下几个原因&#xff1a; 基于内存单线程模型高效数据结构非阻塞I/O 基于内存: 内存的读写效率是…...

react使用antd的table组件,实现点击弹窗显示对应列的内容

特别提醒&#xff1a;不能在table的columns的render里面设置弹窗组件渲染&#xff0c;因为这会导致弹窗显示的始终是最后一行的内容&#xff0c;因为这样渲染的结果是每一行都会重新渲染一遍这个弹窗并且会给传递一个content的值&#xff0c;渲染到最后一行的时候&#xff0c;就…...

c++代码代码逻辑走查

自助生物采集代码 C部分流程...

CSS scoped 属性的原理

scoped 一、scoped 是什么&#xff1f;二、实现原理 一、scoped 是什么&#xff1f; 在 Vue 组件中&#xff0c;为了使样式私有化&#xff08;模块化&#xff09;&#xff0c;不对全局造成污染&#xff0c;可以在 style 标签上添加 scoped 属性以表示它的只属于当下的模块&am…...

git 查看某个分支是从哪个分支拉出来的

原文链接&#xff1a;https://blog.csdn.net/allanGold/article/details/102478157 git reflog show 分支名git reflog --datelocal | grep 分支名git reflog --datelocal | grep 分支名 $ git reflog --datelocal | grep release3 5c50761 HEAD{Thu Jun 29 12:53:45 2023}: c…...

vue helloworld.vue 点击按钮弹出 dialog,并给dialog传值

1 DataAnalysisVue.Vue -->应该组件文件名和 name: 的名字一致 <template><div><el-dialog :title"dataAnalysisMsg" :visible.sync"dataAnalysisvalue" :before-close"handleClose"><span>{{ dataAnalysisMsg }}&l…...

html动态爱心代码【三】(附源码)

目录 前言 特效 内容修改 完整代码 总结 前言 七夕马上就要到了&#xff0c;为了帮助大家高效表白&#xff0c;下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;表白等场景&#xff0c;可直…...

mmseg——报错解决:RuntimeError: CUDA error: an illegal memory access was encountered

可能解决方法汇总 GitHub issue相关汇总RuntimeError: CUDA error while trainingCUDA error: an illegal memory access was encountered记录使用mmseg时在计算交叉熵损失遇到的RuntimeError问题与解决方案...

AWS复制EC2文件到S3,g4dn.2xlarge没有NVIDIA GPU 驱动问题

1、给instances权限 action > Security > modify IAM role 把提前创建好的role给这个instance即可 2、复制到bucket aws s3 cp gogo.tar.gz s3://ee547finalbucket不需要手动安装GPU驱动 如果要自己安装&#xff0c;参考https://docs.aws.amazon.com/AWSEC2/latest/U…...

Go语言GIN框架安装与入门

Go语言GIN框架安装与入门 文章目录 Go语言GIN框架安装与入门1. 创建配置环境2. 配置环境3. 下载最新版本Gin4. 编写第一个接口5. 静态页面和资源文件加载6. 各种传参方式6.1 URL传参6.2 路由形式传参6.3 前端给后端传递JSON格式6.4 表单形式传参 7. 路由和路由组8. 项目代码mai…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...