AVR单片机实验报告PCF8563
PCF8563在电子时钟设计中的应用
PCF8563在电子时钟设计中的应用引言数字时钟已成为时钟设计的主导方向,广泛应用于实时控制系统。
数字时钟实质是一个对标准频率计数的计数电路,通常由晶体振荡电路、分频电路、时间计数电路、译码驱动电路等组成。
这里提出一种电子时钟系统设计方案,是以avr 单片机mega16作为控制核心,采用PCF8563时钟/日历器件以及数码管显示,通过硬件设计及软件编程实现的。
1 mega16简介ATmega16是基于增强的AVR RISC结构的低功耗8位CMOS微控制器。
由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。
AVR 内核具有丰富的指令集和 32 个通用工作寄存器。
所有的寄存器都直接与算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。
这种结构大大提高了代码效率,并且具有比普通的 CISC微控制器最高至 10倍的数据吞吐率。
ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512 字节 EEPROM,1K字节 SRAM,32 个通用I/O 口线,32 个通用工作寄存器,用于边界扫描的 JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10 位具有可选差分输入级可编程增益 (TQFP 封装 ) 的 ADC ,具有片内振荡器的可编程看门狗定时器,一个 SPI串行端口,以及六个可以通过软件进行选择的省电模式。
工作于空闲模式时 CPU 停止工作,而 USART、两线接口、A/D 转换器、SRAM、T/C、SPI 端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;ADC噪声抑制模式时终止CPU 和除了异步定时器与ADC以外所有 I/O 模块的工作,以降低 ADC 转换时的开关噪声; Standby 模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展 Standby 模式下则允许振荡器和异步定时器继续工作。
关于单片机实训报告万能【六篇】
关于单片机实训报告万能【六篇】【篇1】单片机实训报告万能通过今次单片机实训,使我对单片机的认识有了更深刻的理解。
系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。
由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。
例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。
踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。
当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。
我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
但在这次实训中同时使我对汇编语言有了更深的认识。
当我第一次接触汇编语言就感觉很难,特别是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。
这次的实训使培养了我们严肃认真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。
这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。
希望这次的经历能让我在以后学习中激励我继续进步。
【篇2】单片机实训报告万能通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。
了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和原理。
LED显示器:LED显示器是由发光二管组成显示字段的器件。
通常的8段LED显示器是由8个发光二极管组成,LED显示器分共阳极和共阴极两种。
有段选码和和位选码。
当LED显示器每段的平均电流位5MA时,就有较满意的亮度,一般选择断码5-10MA 电流;位线的电流应选择40-80MA。
LED显示器的显示方式有动态和静态两种。
7289A芯片是具有SPI串行接口功能的显示键盘控制芯片,它可同时取得8位共阴极数码管和64个键的键盘矩阵。
单片机实训报告范文精选5篇精选
单片机实训报告范文精选5篇实训报告是展示本身实训收获成长的重要报告,那么实训报告该如何写呢?小编精选了一些关于实训报告的优秀范例,一起来看看吧。
单片机课程设计心得体会在学校学习期间我有幸的参加了学校的单片机学习小组,在小组里我理解了什么是单片机,单片机有哪些用途,利用单片机可以实现哪些功能来方便人们的生活如交通灯,时钟,还有中,电子玩具等等,它们里面都有单片机的存在来实现某种功能。
通过在单片机小组里的学习我简单总结了几点心得和体会:第一:万事开头难,要英勇的迈出第一步,不要总找借口说没有学习过就总推脱。
凡事都有第一步可以先可简单的来,然后可以逐步的向深层次学习。
可以从建工程开始,然后可以找一个简单的小程序先把它敲进单片机内然他运转起来,感受一下单片机的运转,让本人理解单片机整个运转。
第二:关于知识点,学过的要掌握结实,关于没有学的和临时用不到的先不用学习。
比方:小灯得点亮就没有用到中断可以先不用看。
如此可以防止知识过多记不住的苦恼。
关于程序这里的知识点不能只停留在理论层次上,一定要结合着程序进展学习如此才能掌握的特别牢靠,当用到哪里的知识点不记得了可以去看书,关于用不到的可以不去看。
第三:程序不要只是看别人得,一定要本人写过才是本人的。
开始不明白可以参考别人的,看看每一句代表着什么意思,可以实现什么现象。
明白之后本人再重新写一遍,你会觉观察别人的能明白到本人写的时候特别困难。
当你本人能写出来的时候说明你真明白了。
第四:一定要学会程序调试的方法。
有时候把程序写完了然后运转时不能实现理想的现象。
这时有人就晕了不知该如何办,然后就去征询别人。
当别人找出征询题出在哪里时就会恍然大悟。
事实受骗遇到征询题一定要本人尝试着处理,不能遇到征询题就去征询别人。
本人一定要掌握处理征询的方法和思路。
第五:在学习初期看别人的代码,学习别人的思路这个特别有用。
通过看别人的代码特别是有多年编程经历的人的程序,可以迅速提高本人的编程水平。
avr实验报告
通达学院2014 /2015 学年第一学期课程设计实验报告模块名称A VR单片机课程设计(proteus)专业通信工程学生班级学生学号学生姓名指导教师李虹戴海鸿杨洁王明伟AVR单片机软件设计(proteus)报告基本内容包括:1)总体设计原理、思路;根据题目的要求,我们需要事先得到3种波形的信号源,并将其在程序存储器中,然后取出程序存储器里的信号源存放在atmega128的外部RAM中,并通过DAC0832输出到示波器上显示图形。
采用按键方式控制输出波形,并且通过DS18B20上的温度来控制信号的频率,温度在1~10时显示2Hz,温度为11~20时显示4Hz,温度为21~30时为8Hz,温度为31~40时为15Hz,温度大于40时为19Hz。
最后在LM016L上显示出输出的波形名称和温度以及频率。
2)硬件方面原理图的设计:包括使用的元器件、典型芯片的介绍;原理图的说明等1、ATmega128ATmega128为基于AVR RISC结构的8位低功耗CMOS微处理器。
由于其先进的指令集以及单周期指令执行时间,ATmega128 的数据吞吐率高达1 MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。
2、DS18B20DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的,也就是你要做的是配置寄存器。
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
单片机实验报告
单片机实训报告一、实验目的了解一个实际的单片机应用项目,从方案讨论、电路设计、程序设计到综合调试的各环节操作巩固所学单片机知识,更加了解单片机中所用芯片的各个功能应用,提高专业能力与动手能力。
二、实验任务1、时钟芯片测试PCF85632、ZLG7289测试3、液晶屏显示姓名、学号、班级4、动态显示时间三、实验工具Keil4软件、双龙电子软件、相关试验箱等四、实验内容(一)时钟芯片测试PCF8563A、对PCF8563的简介PCF8563是NXP公司生产的支持IIC总线接口的高精度低功耗实时时钟芯片。
该芯片有以下特点:1、宽电压范围 1.0~5.5V,复位电压标准值Vlow=0.9V。
2、超低功耗:典型值为 0.25uA (VDD=3.0V,Tamb=25℃)。
3、可编程时钟输出频率为:32.768KHz 、1024Hz 、32Hz 、1Hz。
4、四种报警功能和定时器功能。
5、内含复位电路、振荡器电容和掉电检测电路。
6、开漏中断输出。
7、400kHz I2C总线(VDD=1.8~5.5V),其从地址读 0A3H;写0A2H。
PCF8563有16个8位寄存器,其中包括:可自动增量的地址寄存器、内置32.768kHz的振荡器(带有一个内部集成电容)、分频器(用于给实时时钟RTC提供源时钟)、可编程时钟输出、定时器、报警器、掉电检测器和400kHz的I2C总线接口。
所有16个寄存器设计成可寻址的8位并行寄存器,但不是所有位都有用。
当一个RTC寄存器被读时,所有计数器的内容将被锁存,因此,在传送条件下,可以禁止对时钟/日历芯片的错读。
表2、表3所列为各寄存器概况及对应的内存地址和功能,同时列出了它们的BCD格式编码。
表中“——”表示无效位,“0”表示此位应置逻辑。
表3中的世纪位C=0指定世纪数为20XX,C=1指定世纪数为19XX。
当年寄存器中的99变00时,世纪位才会改变。
2 、PCF8563的控制电路图B、 PCF8563实现时、分、秒功能的流程图开始PCF8563初始化读入时间内部缓冲区S=0赋初始值输出数据PCF8563PCF8563 输出数据调用读入时间的内部缓冲区(二)、ZLG7289测试A、对ZLG7289的简介Zlg7289的功能和特性Zlg7289是一款数码显示驱动和键盘扫描管理的芯片。
AVR单片机应用实习.
常用软件的安装与使用
1. AVRC编译器安装与设置(实际操作)。 2. SLISP下载软件安装与设置(实际操
作)。
3. AVRC编译器使用(用代码生成器)。 4. SLISP下载软件使用(实际操作)。
AVR C 编译软件使用步骤:
1)先用编译器的代码生成向导建立新的工程文件框 架(lx1.prj)
PORTB= 0X显4F示原理2
+
3
3
3
3
-
1101
PORTB=11111110
1<<1 00000001<<1 00000010
PORTB= ~(1<<1)=111111101
PORTA=ledbuff[2]//=table(2)=0x5B
PORTB= 0X显5B示原理3
+
2
2
2
2
-
1011
PORTB=10111111
发光管低四位亮否则发光管高四位亮。
M17.试编程序,使数码管循环显示
000~FFF,方式为“--P数字--”,当数字
小于800时发光管单灯循环右移否则循环
左移。
显示提示 转换提示
显示原理
返回
PORTA.7-PRTDA.0 (高电平有效)
+
1234 1110
PORTB.3-PORTB.0 (低电平有效)
1<<2 00000001<<2 00000100
PORTB= ~(1<<2)=11111011
返回
PORTA=ledbuff[3]//=table(1)=0x06
PORTB= 0X06
1
普中科技单片机实验板使用操作说明
8 个独立按钮接口 74HC165 输入接口
JP8-JP11 单片机的所有 I/O 输出脚
J12
8 位数码管数据线接口
J4
AD/DA 外引输出口
JP12
74HC595 输出口
J12
数码管数据线接口
其他 J9
J10
LCD1602 液晶屏接口 12864/240128 液晶屏接线端
DS18b20 温度 18B20 接口
图 2.4
2.5 接下来就是等待安装,安装完毕后单击 Finish 加以确认,此时您可以在桌面上看到
Keil uVision3 软件的快捷图标,双击它就可以进入 Keil C51 集成开发环境。
3) Keil C51 软件的使用
Keil C51 集成开发环境是以工程的方法来管理文件的,而不是单一文件的模式。所有
作者 2008 年
目录
第一章 产品介绍 ………………………………………… 1 第二章 KeilC51 的安装和使用说明 ……………………… 3 第三章 USB_Driver 驱动程序安装 ………………………9 第四章 烧录程序使用说明 ………………………………… 17 第五章 硬件原理分析 ……………………………………… 19 附录一 开发软件中的关键字 ……………………………… 32 附录二 常见问题解答 ……………………………………… 37
J6
短接时 74HC165 功能
J8
短接时,为蜂铃器功能
J10-J11 可以接 USB 电脑键盘功能
JP15
USB 通信功能(正常使用时必须短接)
JP16
串口通信功能(使用串口线时必须短接)
JP1
8 个 LED 接口
JP2
单片机实验报告
单片机实验报告一、实验目的本次单片机实验的主要目的是通过实际操作和编程,深入了解单片机的工作原理和应用,掌握单片机系统的设计、开发和调试方法,提高自身的动手能力和解决问题的能力。
二、实验设备1、单片机开发板2、计算机3、编程软件(如 Keil)4、下载器5、示波器6、万用表三、实验内容1、点亮 LED 灯通过编写简单的程序,控制单片机的引脚输出高低电平,从而点亮或熄灭连接在该引脚上的 LED 灯。
这是单片机最基础的操作之一,旨在熟悉单片机的编程环境和引脚控制方式。
2、数码管显示利用单片机驱动数码管,实现数字的显示。
需要了解数码管的工作原理和驱动方式,通过编程控制数码管的段选和位选信号,显示不同的数字。
3、按键输入设计按键电路,通过读取按键的状态,实现对单片机系统的输入控制。
例如,通过按键切换不同的显示模式或控制其他外部设备。
4、定时器/计数器应用使用单片机的定时器/计数器功能,实现定时、计数等操作。
例如,设计一个定时闪烁的 LED 灯,或者通过计数器统计外部脉冲的个数。
5、串口通信实现单片机与计算机之间的串口通信,将单片机采集到的数据发送到计算机上进行显示和处理,或者接收计算机发送的指令对单片机系统进行控制。
四、实验原理1、单片机的基本结构单片机通常由中央处理器(CPU)、存储器(包括程序存储器和数据存储器)、输入输出接口(I/O 口)、定时器/计数器、中断系统等部分组成。
2、编程语言本次实验采用 C 语言进行编程。
C 语言具有简洁、高效、可移植性强等优点,非常适合单片机的开发。
3、引脚功能单片机的引脚分为电源引脚、时钟引脚、复位引脚、I/O 引脚等。
通过对这些引脚的合理配置和控制,可以实现各种功能。
4、数码管驱动原理数码管分为共阴极和共阳极两种类型。
通过控制数码管的段选和位选信号,可以使数码管显示不同的数字和字符。
5、按键检测原理按键通常采用上拉电阻或下拉电阻的方式连接到单片机的I/O 引脚。
AVR单片机专用周周实验报告(数码管一位显示)
AVR单片机专用周实习报告题目:数码管一位显示班级:学号:姓名:目录一、实验目的 (2)二、实验要求 (2)三、实验原理 (2)四、实验程序 (5)五、心得体会 (9)一、实验目的通过对例程序的思考与理解,利用实验室所提供的AVR单片机硬件、软件资源,编程实现数码管的一位显示。
观察并分析实验结果,在实验中了解单片机的结构与原理。
二、实验要求利用课上所教例程序的相关原理,设计出数码管一位显示的程序。
观察实验结果,写出实验报告。
三、实验原理3.1、 AVR系列端口介绍AVR系列单片机的IO端口结构比基本51系列单片机的端口要复杂一些,以ATmega16单片机为例,它有4组8位IO端口,分别是PORTA、PORTB、PORTC和PORTD。
通过特殊功能寄存器,我们可以使每个端口实现双向数字IO 通道或双向模拟量通道功能。
ATmega16单片机的大部分端口具有除基本IO功能外的第二功能,关于第二功能的使用这里不作介绍。
下面说明端口的基本IO输入输出和模拟量输入输出的工作过程。
①同步数字输出。
作为输出时,总线给方向寄存器D触发器F9写1,三态门F1打开,总线来的数据经D触发器F10到达输出端Pxn,此时上拉电阻是关断的。
②数字输入。
作为输入时,总线给方向寄存器D触发器F9写0,三态门F1关断,上拉电阻根据需要由PUD选择是否导通,在休眠信号SLEEP无效时,模拟开关M1打开,MOS管T2截止,从Pxn来的输入信号经整形电路F7和同步锁存器进入三态门F4成为同步输入信号。
③模拟量输入输出。
在模拟量输入输出模式下,通过设置使上拉电阻、三态门F1和模拟开关M1都处于关断状态,管脚Pxn直接连通单片机内部相关模拟量输入输出单元,为单片机内部模拟比较器、A/D转换器及D/A转换器等功能单元提供与外围连接的通道。
3.2、数码管(发光二级管)数码管(发光二级管)分为共阳极连接和共阴极连接。
共阳极数码管在判别时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
实验报告
AVR单片机开发基础实验实验一:开发环境使用实验熟悉单片机开发环境。
掌握ICCAVR软件开发环境对应用程序的设计、编译、链接;掌握progisp烧写程序的使用方法,完成执行文件的下载。
1、ICCAVR软件使用步骤:打开ICCAVR开发环境,点击project——new,新建一个项目工程,选择保存路径,输入工程名,单击保存。
选择file——new 新建一个文件,任意输入几个字符后点击左上角蓝色按钮保存文件,注意后缀名为“.c”。
在界面右侧刚刚新建的工程名处单价右键。
选择Add files 添加文件,将.c文件添加到工程中。
编写程序代码,写好后点击project——Options,在对话框中选择单片机的型号,At mega128:M103mode,然后点击Build project 编译程序。
如有错误,软件下方会给出错误提示。
2、progisp下载软件的使用将USBASP下载器连接到电脑的USB接口。
打开progisp软件,在Select chip 下拉菜单中选择单片机型号Atmega128A,其它选项按下图设置:设置完成后,点击界面右上角文件中的调入Flash,选择刚才建立的工程,打开编译后的文件,文件类型为Intel Hex(*.Hex),单击自动,即可将刚才编写的程序下载到单片机中。
实验课二:输入/输出接口实验题目1:指示灯闪烁实验在面包板上安装8个二极管指示灯,通过提供的限流电阻与单片机主板上的某个并行接口(8bit)连接,在开发环境中完成单片机应用程序设计、编译、链接和下载,实现8个指示灯闪烁,闪烁间隔时间为0.5s,按要求搭建电路,LED的正极直接与单片机PA口连接,即高电平点亮,负极通过一个1K的限流电阻接地(单片机的地端引脚)。
按实验一中介绍的操作步骤,使用ICCAVR软件编写程序代码,编写思路如下:(1)由于要求LED亮灭间隔0.5秒,那么就要编写一个延时函数,在点亮和熄灭LED 后都要调用这个延时函数,延时函数中的参数决定了延时的时间。
AVR单片机软件设计(proteus)报告
2013 /2014 学年第一学期课程设计实验报告模块名称A VR单片机课程设计(proteus)专业通信工程学生班级学生学号学生姓名指导教师AVR单片机软件设计(proteus)报告一、总体设计原理、思路;考虑使用数字温度传感器,结合单片机电路设计,采用一只DS18B20温度传感器,直接读取被测温度值,之后进行转换,依次完成设计要求。
二、硬件方面原理图的设计:包括使用的元器件、典型芯片的介绍;原理图的说明等实验原理图a)晶振晶振为单片机提供时钟信号。
单片机XIAL1和XIAL2分别接33PF的电容,中间再并一个晶振,形成单片机的晶振电路。
晶振电路b)复位电路单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
AVR复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。
复位向量处的指令必须是绝对跳转JMP 指令,以使程序跳转到复位处理例程。
AVR的复位信号源有五个:上电复位。
电源电压低于上电复位门限 VPOT 时, MCU 复位。
外部复位。
引脚 RESET 上的低电平持续时间大于最小脉冲宽度时MCU 复位。
看门狗复位。
看门狗使能并且看门狗定时器溢出时复位发生。
掉电检测复位。
掉电检测复位功能使能,且电源电压低于掉电检测复位门限 VBOT 时 MCU 即复位。
JTAG AVR复位。
复位寄存器为1 时MCU 复位。
复位电路ALE引脚悬空,复位引脚接到复位电路、VCC接电源、VSS接地、EA接电源c )温度传感器(DS18B20)电路DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
主要根据应用场合的不同而改变其外观。
封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。
AVR单片机汇编语言编程实验报告
AVR单片机汇编语言编程实验学院:自动化专业:测控技术与仪器一、实验名称:AVR单片机汇编语言编程实验二、实验目的:熟悉并掌握AVR单片机指令系统、汇编语言常用伪指令,掌握单片机汇编语言编程技术,编程实现指定功能,加深对计算机汇编指令的理解。
三、实验仪器:计算机,VMware,Windows7虚拟机,AtmelStudio开发环境,Proteus仿真开发环境四、实验内容、实验过程及结果分析:1. Flash 单元赋值创建汇编语言工程,目标机型选为Mega128。
使用汇编语言伪指令进行编程,将下述32 字节的常数数据存入首地址为$0160 的连续flash 存储单元照片中。
数据如下:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x070x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x7;0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf80x80,0x90,0x88,0x83,0xc6,0xa,0x86,0x8e;前后16 字节分别是字符0-F 对应的共阴极和共阳极LED 数码管的字形显示段码。
随后使用IDE 自带的调试工具,进入debug 调试。
在调试过程中,在Flash 存储器映像中查找上述存入的数据块所对应的地址,记录Flash 存储器映像。
图1.1.0如图1所示,数据3f的首地址为$002C0的内存单元中,为$的二倍,因此说明数据成功存入该段存储单元2. DATA RAM 内存块赋值使用汇编语言指令,将上述存储在 Flash 中的 32 个字节单元的数据块依次赋值给起始地址为$0230 的 SRAM 内存块的相应内存单元,流程如图2.1.0 所示。
图2.1.0寄存器初始状态如图2.2.0所示。
将Z指针指向先前第一位数据的首地址,并进行一个次数为16的循环,通过LPM指令将储存在Flash中16字节的数据拷贝至起始地址为$0230的内存单元中,如图2.2.1所示,数据存储状态如2.2.3 所示。
AVR单片机测温实验报告
青岛科技大学2012/2013 学年第二学期课程设计实验报告模块名称A VR单片机课程设计专业电气工程自动化学生班级电气121学生姓名于呈宾学生学号1218020130学生姓名巩志成学生学号1218020114指导教师王泽华A VR单片机课程设计报告一.课程设计目的1、设计要求本课程着重于把理论学习的知识应用于实际,解决实际的工程问题,培养学生的系统设计能力,提高学生的科研动手能力。
本次设计要求深入了解A VR单片机ATmega8a的功能,通过研究开发板的硬件设计,进行相关的硬件连接,选择合适的编程及程序植入方法,用开发板完成列出的各设计课题;初步学习撰写规范的设计文档;提交实验报告。
二.课程设计内容1、基本要求:1、正确连接数LM35测温传感器,LCD JHD 162A液晶显示器或通过串口将数据传递至PC。
2、设定温度告警门限。
3、通过蜂鸣器、发光二极管进行告警显示。
三.课程设计过程(一)、本实验可以分为三个部分来考虑:1、LM35测温传感器采集温度显示在LED上。
2、设定温度告警门限。
通过蜂鸣器、发光二极管进行告警显示。
3、添加按键控制温度警告门限和各功能汇总。
(二)硬件介绍1、ATmega8ATmega8主要特点:具有8K程序和数据存储器(flash)1KB内存(SRAM)512B电擦除可编程只读存储器(EEPROM)23个可编程的I/O接口3路定时器/计数器3通道PWM输出8路10位ADCTWI两线接口USART通用异步串行口SPI串行外设接口ISP程序下载接口ISP接口:在线可编程(in-system programming)接口,占用四条引脚,分别是:RESET,SCK,MOSI,MISOI/O引脚:有B,C和D口,C,D为8位,B为6位。
2、LM35是由National Semiconductor 所生产的温度传感器,其输出电压与摄氏温标呈线性关系,转换关系为:0 时输出为0V,每升高1℃,输出电压增加10mV。
avr单片机实验报告
avr单片机实验报告
《AVR单片机实验报告》
实验目的:通过对AVR单片机的实验,掌握单片机的基本原理和应用,提高对单片机的理论和实践能力。
实验内容:
1. 熟悉AVR单片机的基本结构和工作原理;
2. 学习AVR单片机的编程语言和开发工具;
3. 进行LED灯控制、蜂鸣器控制、数码管显示等实验;
4. 学习单片机的输入输出控制和中断处理;
5. 完成一个简单的单片机应用项目。
实验过程:
1. 阅读AVR单片机的相关资料,了解其基本原理和编程语言;
2. 使用开发工具进行单片机程序的编写和调试;
3. 连接实验电路,进行LED灯、蜂鸣器和数码管的控制实验;
4. 学习单片机的输入输出控制和中断处理,编写相应的程序进行实验;
5. 完成一个简单的单片机应用项目,如温度检测、光敏控制等。
实验结果:
1. 成功掌握了AVR单片机的基本原理和编程语言;
2. 完成了LED灯、蜂鸣器和数码管的控制实验;
3. 熟练掌握了单片机的输入输出控制和中断处理;
4. 成功完成了一个简单的单片机应用项目。
实验总结:
通过本次实验,我深刻理解了AVR单片机的工作原理和应用方法,提高了对单片机的理论和实践能力。
在今后的学习和工作中,我将继续深入学习单片机技术,不断提升自己的专业能力。
单片机实验报告范文
单片机实验报告范文单片机(Microcontroller)是指一种封装了微处理器(Microprocessor)、存储器和各种输入输出接口电路功能的集成电路。
单片机在电子设计与开发中有广泛应用,可以用于控制和监测各种系统和设备。
本实验报告将介绍在实验中使用单片机所进行的实验步骤和实验结果。
实验目的:1.理解单片机的基本工作原理和功能。
2.掌握单片机的编程和调试方法。
3.应用单片机实现简单的控制功能。
实验仪器和材料:1.单片机开发板2.计算机B数据线4.电源适配器5.LED灯6.麦克风模块7.温度传感器实验步骤:1.准备工作:将单片机开发板与计算机连接,接通电源适配器。
2.熟悉开发工具:安装单片机开发软件,并了解软件的基本功能。
3.学习编程语言:了解单片机的编程语言,例如C语言或汇编语言,并编写简单的程序。
4.硬件连接:将LED灯、麦克风模块和温度传感器连接至开发板的相应引脚。
5.编程实现:根据实验要求,编写相应的程序,控制LED灯、获取麦克风模块的声音信号或获取温度传感器的温度值。
7.实验结果:根据实验要求,记录LED灯的亮灭状态、麦克风模块的声音信号强度或温度传感器的温度数值。
实验结果:通过实验,我们成功地控制了LED灯的亮灭状态,获取了麦克风模块的声音信号强度和温度传感器的温度数值。
在编程实现过程中,我们学会了使用单片机编程语言,了解了一些常用的语法和函数。
在调试测试中,我们可以通过相关的输出或显示结果来判断程序的正确性,及时发现和修复错误。
实验总结:本实验通过单片机开发板和相应的硬件以及编程实现了简单的控制和监测功能。
通过实验,我们深入了解了单片机的基本工作原理和功能,并掌握了一些基本的编程和调试方法。
实验结果表明,我们成功实现了实验要求,并对单片机的应用有了更加深入的理解。
通过这次实验,我们不仅提高了动手实践能力,也增加了对科技发展的看法。
单片机 实验报告
单片机实验报告单片机实验报告引言单片机是一种集成电路芯片,具有微处理器、存储器、输入输出接口等功能,广泛应用于各个领域。
本实验报告将介绍我在单片机实验中的学习和实践经验,包括实验目的、实验步骤、实验结果以及实验心得。
实验目的本次实验的目的是通过使用单片机,学习和掌握单片机的基本原理、编程方法和应用技巧。
具体目标包括了解单片机的基本构成、学习单片机的编程语言、掌握单片机的输入输出操作等。
实验步骤1. 实验准备:在实验开始前,我们首先准备了所需的硬件和软件工具。
硬件方面,我们使用了一块开发板和一片单片机芯片。
软件方面,我们使用了一款单片机开发软件。
2. 硬件连接:将单片机芯片插入开发板的插槽中,并通过连接线将开发板与计算机相连。
3. 编写程序:使用单片机开发软件,编写程序代码。
在本次实验中,我们选择了一个简单的LED灯闪烁的程序作为示例。
4. 烧录程序:将编写好的程序通过编程器烧录到单片机芯片中。
5. 运行程序:将烧录好的芯片插入开发板后,通过电源供电,运行程序。
LED灯将按照程序中设定的频率进行闪烁。
实验结果经过以上实验步骤,我们成功地实现了LED灯的闪烁。
通过调整程序中的参数,我们还可以改变闪烁的频率和模式。
这次实验不仅让我们掌握了单片机的基本编程方法,还让我们对单片机的应用有了更深入的了解。
实验心得通过本次实验,我深刻认识到了单片机在现代电子技术中的重要性和广泛应用。
单片机不仅可以用于控制各种电子设备,还可以应用于嵌入式系统、自动化控制等领域。
掌握单片机的编程和应用技巧,对于我们今后的学习和工作都具有重要意义。
在实验过程中,我遇到了一些困难和问题,但通过查阅资料、与同学讨论等方式,我都得到了解决。
这让我意识到在学习和实践中,积极主动地寻求帮助和解决问题的能力是非常重要的。
此外,我还发现了单片机编程的乐趣。
通过编写程序,我可以控制各种设备的运行,实现自己的创意和想法。
这种创造性的过程给我带来了很大的满足感和成就感。
avr实验报告
avr实验报告设计⽬的1、熟悉A VR单⽚机的使⽤及RTC的⼯作原理,配置⽅法。
2、熟悉串⼝的使⽤。
3、熟悉LCD的使⽤。
⼀、设计任务1、熟悉RTC的配置过程2.将按秒输出修改成按H:M:S的输出形式三、系统构成与原理1、RTC模块:图1 RTC模块2、LCD模块:调⽤函数,利⽤点阵的形式显⽰字符。
3、相关寄存器:CTRL寄存器:VAL(RTC Value)寄存器:TOP寄存器:RTC Interrupt Enable/Disable/Mask/Status/Clear:# include "intc.h"#endif#include "board.h"#include "compiler.h"#include "rtc.h"#include "usart.h"#include "gpio.h"#include "pm.h"#include "dip204.h"#include "intc.h"#include "delay.h"#include "spi.h"#include "conf_clock.h"#if BOARD==EVK1100# define EXAMPLE_USART(&AVR32_USART1)# define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN# define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN# define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION #elif BOARD==EVK1101# define EXAMPLE_USART(&AVR32_USART1)# define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN# define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN# define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION #endif#if!defined(EXAMPLE_USART)||\!defined(EXAMPLE_USART_RX_PIN)||\!defined(EXAMPLE_USART_RX_FUNCTION)||\!defined(EXAMPLE_USART_TX_PIN)||\!defined(EXAMPLE_USART_TX_FUNCTION)# error The USART configuration to use in this example is missing. #endifvolatile static int print_sec=1;// Time counterstatic int sec=0;#if__GNUC____attribute__((__interrupt__))#elif__ICCAVR32__/* RTC Interrupt */#pragma handler=AVR32_RTC_IRQ_GROUP, 1{sec++;// Increment the minutes counterrtc_clear_interrupt(&AVR32_RTC);// clear the interrupt flag print_sec=1;}char*print_i(char*str,unsigned int n){int i=10;str[i]='\0';do{str[--i]='0'+n%10;n/=10;}while(n);return&str[i];}//change the number to string#define GPIO_CHARSET GPIO_PUSH_BUTTON_0#define GPIO_BACKLIGHT_MINUS GPIO_PUSH_BUTTON_1 #define GPIO_BACKLIGHT_PLUS GPIO_PUSH_BUTTON_2 unsigned short display;unsigned short current_char=0;#if__GNUC____attribute__((__interrupt__))#elif__ICCAVR32____interrupt#endifstatic void dip204_example_PB_int_handler(void){unsigned short i;if(gpio_get_pin_interrupt_flag(GPIO_CHARSET)){dip204_set_cursor_position(1,4);/* go to first column of 4th line */ for(i=current_char;i{dip204_write_data(i);}dip204_write_string(" ");current_char=i;if(current_char>=0xFF){current_char=0x10;}/* reset marker */gpio_clear_pin_interrupt_flag(GPIO_CHARSET);//allow new interrupt : clear the IFR flag }if(gpio_get_pin_interrupt_flag(GPIO_BACKLIGHT_PLUS)){dip204_set_backlight(backlight_power_increase);gpio_clear_pin_interrupt_flag(GPIO_BACKLIGHT_PLUS);}if(gpio_get_pin_interrupt_flag(GPIO_BACKLIGHT_MINUS)){dip204_set_backlight(backlight_power_decrease);gpio_clear_pin_interrupt_flag(GPIO_BACKLIGHT_MINUS);}}#if__GNUC____attribute__((__interrupt__))#elif__ICCAVR32____interrupt#endifstatic void dip204_example_Joy_int_handler(void){if(gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_UP)){dip204_set_cursor_position(19,1);dip204_write_data(0xDE);display=1;gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_UP);}if(gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_DOWN)){dip204_set_cursor_position(19,3);dip204_write_data(0xE0);display=1;gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_DOWN);}if(gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_LEFT)){dip204_set_cursor_position(18,2);dip204_write_data(0xE1);display=1;gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_LEFT);}if(gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_RIGHT)){dip204_set_cursor_position(20,2);dip204_write_data(0xDF);display=1;gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_RIGHT);}if(gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_PUSH)){dip204_set_cursor_position(19,2);dip204_write_data(0xBB);dip204_set_cursor_position(1,4);dip204_write_string(" AT32UC3A Series ");display=1;gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_PUSH);}}void dip204_example_configure_push_buttons_IT(void){gpio_enable_pin_interrupt(GPIO_CHARSET,GPIO_RISING_EDGE);gpio_enable_pin_interrupt(GPIO_BACKLIGHT_PLUS,GPIO_RISING_EDGE);gpio_enable_pin_interrupt(GPIO_BACKLIGHT_MINUS,GPIO_RISING_EDGE);Disable_global_interrupt();/* Disable all interrupts */INTC_register_interrupt(&dip204_example_PB_int_handler,AVR32_GPIO_IRQ_0+ (GPIO_BACKLIGHT_PLUS/8),AVR32_INTC_INT1); INTC_register_interrupt(&dip204_example_PB_int_handler,AVR32_GPIO_IRQ_0+ (GPIO_BACKLIGHT_MINUS/8),AVR32_INTC_INT1); INTC_register_interrupt(&dip204_example_PB_int_handler,AVR32_GPIO_IRQ_0+ (GPIO_CHARSET/8),AVR32_INTC_INT1);Enable_global_interrupt();}void dip204_example_configure_joystick_IT(void){gpio_enable_pin_interrupt(GPIO_JOYSTICK_UP,GPIO_FALLING_EDGE);gpio_enable_pin_interrupt(GPIO_JOYSTICK_DOWN,GPIO_FALLING_EDGE);gpio_enable_pin_interrupt(GPIO_JOYSTICK_RIGHT,GPIO_FALLING_EDGE);gpio_enable_pin_interrupt(GPIO_JOYSTICK_PUSH,GPIO_FALLING_EDGE);gpio_enable_pin_interrupt(GPIO_JOYSTICK_LEFT,GPIO_FALLING_EDGE);Disable_global_interrupt();INTC_register_interrupt(&dip204_example_Joy_int_handler,AVR32_GPIO_IRQ_0+ (GPIO_JOYSTICK_UP/8),AVR32_INTC_INT1); INTC_register_interrupt(&dip204_example_Joy_int_handler,AVR32_GPIO_IRQ_0+ (GPIO_JOYSTICK_DOWN/8),AVR32_INTC_INT1); INTC_register_interrupt(&dip204_example_Joy_int_handler,AVR32_GPIO_IRQ_0+(GPIO_JOYSTICK_RIGHT/8),AVR32_INTC_INT1);INTC_register_interrupt(&dip204_example_Joy_int_handler,AVR32_GPIO_IRQ_0+ (GPIO_JOYSTICK_LEFT/8),AVR32_INTC_INT1); INTC_register_interrupt(&dip204_example_Joy_int_handler,AVR32_GPIO_IRQ_0+ (GPIO_JOYSTICK_PUSH/8),AVR32_INTC_INT1); Enable_global_interrupt();}int main(void){char temp[20];char temp1[20];char temp2[20];char*ptemp;char*ptemp1;char*ptemp2;static const gpio_map_t USART_GPIO_MAP={{EXAMPLE_USART_RX_PIN,EXAMPLE_USART_RX_FUNCTION},{EXAMPLE_USART_TX_PIN,EXAMPLE_USART_TX_FUNCTION},{DIP204_SPI_SCK_PIN,DIP204_SPI_SCK_FUNCTION},// SPI Clock.{DIP204_SPI_MISO_PIN,DIP204_SPI_MISO_FUNCTION},// MISO.{DIP204_SPI_MOSI_PIN,DIP204_SPI_MOSI_FUNCTION},// MOSI.{DIP204_SPI_NPCS_PIN,DIP204_SPI_NPCS_FUNCTION}// Chip Select NPCS.};pm_switch_to_osc0(&AVR32_PM,FOSC0,OSC0_STARTUP);Disable_global_interrupt();INTC_init_interrupts();Enable_global_interrupt();spi_options_t spiOptions={.reg=DIP204_SPI_NPCS,.baudrate=1000000,.bits=8,.spck_delay=0,.trans_delay=0,.stay_act=1,.spi_mode=0,};// USART optionsstatic const usart_options_t USART_OPTIONS={.baudrate=57600,.charlength=8,.paritytype=USART_NO_PARITY,.stopbits=USART_1_STOPBIT,.channelmode=0};pm_switch_to_osc0(&AVR32_PM,FOSC0,OSC0_STARTUP);// Assign GPIO pins to USART0.gpio_enable_module(USART_GPIO_MAP,sizeof(USART_GPIO_MAP)/sizeof(USART_GPIO_MAP[0]));usart_init_rs232(EXAMPLE_USART,&USART_OPTIONS,12000000);usart_write_line(EXAMPLE_USART, "\x1B[2J\x1B[H\r\nATMEL\r\n");usart_write_line(EXAMPLE_USART, "AVR32 UC3 - RTC example\r\n");usart_write_line(EXAMPLE_USART, "RTC 32 KHz oscillator program test.\r\n");spi_initMaster(DIP204_SPI,&spiOptions);// setup chip registersspi_selectionMode(DIP204_SPI,0,0,0);// Set selection mode: variable_ps, pcs_decode, delayspi_enable(DIP204_SPI);spi_setupChipReg(DIP204_SPI,&spiOptions,FOSC0);dip204_example_configure_push_buttons_IT();dip204_example_configure_joystick_IT();dip204_init(backlight_PWM,true);current_char=0x10;// reset markerDisable_global_interrupt();#if__GNUC__INTC_init_interrupts();// Initialize interrupt vectors.INTC_register_interrupt(&rtc_irq,AVR32_RTC_IRQ,AVR32_INTC_INT0);// Register the RTC interrupt handler to the interrupt controller. #endifif(!rtc_init(&AVR32_RTC,RTC_OSC_32KHZ,RTC_PSEL_32KHZ_1HZ)){usart_write_line(&AVR32_USART0, "Error initializing the RTC\r\n");while(1);}rtc_set_top_value(&AVR32_RTC,0);rtc_enable_interrupt(&AVR32_RTC);// Enable the interruptsrtc_enable(&AVR32_RTC);// Enable the RTCEnable_global_interrupt();{if(print_sec){usart_write_line(EXAMPLE_USART, "\x1B[5;1H"); ptemp=print_i(temp,sec%60);ptemp1=print_i(temp1,(sec/60)%60);ptemp2=print_i(temp2,sec/3600);usart_write_line(EXAMPLE_USART, "Timer: "); usart_write_line(EXAMPLE_USART,ptemp2); usart_write_line(EXAMPLE_USART, "h");usart_write_line(EXAMPLE_USART,ptemp1); usart_write_line(EXAMPLE_USART, "m");usart_write_line(EXAMPLE_USART,ptemp); usart_write_line(EXAMPLE_USART, "s");print_sec=0;}dip204_set_cursor_position(5,1);dip204_write_string("the timer is");dip204_set_cursor_position(5,2);dip204_write_string(ptemp2);dip204_set_cursor_position(7,2);dip204_write_string("h ");dip204_set_cursor_position(8,2);dip204_write_string(ptemp1);dip204_set_cursor_position(10,2);dip204_write_string("m");dip204_set_cursor_position(11,2);dip204_write_string(ptemp);dip204_set_cursor_position(13,2);dip204_write_string("s");dip204_hide_cursor();delay_ms(400);dip204_set_cursor_position(5,2);dip204_write_string(" ");dip204_set_cursor_position(8,2);dip204_write_string(" ");dip204_set_cursor_position(11,2);dip204_write_string(" ");//display the timer }}五、运⾏结果。
AVR报告
应用工程学院AVR单片机上机考试实验报告题目:计数时钟设计专业:班级:姓名:学号:指导老师:一、题目要求与实训目的要求:设计一个秒表计时器,要求用四位数码管分别显示分秒毫秒,其中分一位显示;秒二位显示、毫秒一位显示,如显示格式如: 1.23.4 代表:1分 23秒400毫秒。
最大显示时间为9.59.9 即:9分99秒900毫秒。
当显示到此值后,计时从 0分0秒0毫秒从新开始。
功能实现:(1)用Proteus 完成电路图的绘制(2)4位数码管点亮显示功能实现(3)从0分00秒0毫秒正常计时**分**秒**毫秒(4)固定时间正常计时功能实现(5)固定时间倒计时功能实现(6)自由设定时间后正常计时功能实现(7)自由设定时间后倒计时功能实现二、实训中所用到的工具与仪表(1)402教室电脑一台(2)ATMEGA8芯片一块(3)7SEG-MPX4-CC-BUNE数码管一块(4)开关4个(5)电阻4个三、方案设计本次设计是用单片机做为时钟的控制中心(单片机选择ATMEGA8),利用一个秒表计时器显示分秒毫秒,其中分一位显示;秒二位显示、毫秒一位显示,控制时间的自由调整。
四、作品测验制作最终结果有(4)固定时间正常计时功能实现(5)固定时间倒计时功能实现2个功能未能实现只得了80实在是毕生遗憾五、电路原理图六、电路控制程序#include <mega8.h>#include<delay.h>typedef unsigned int uint;typedef unsigned char uchar;uchar fen=0,miao=0; //用于设时的变量寄存uint count; //用于定时器中断函数计数uchar minute,second,decimal; //分、秒、小数位变量定义uchar add_sign=1,install_show_sign=1,add_all=0; //正计数标志、设置显示标志void bufvalue(uchar*); //显示值处理函数声明void display(uchar*,uchar*); //显示函数声明interrupt [EXT_INT0] void ext_int0_isr(void) //TO外部中断{install_show_sign=0; //该标志置0时显示部分显示值的设定情况miao++;if(miao==60){miao=0;fen++;}}interrupt [EXT_INT1] void ext_int1_isr(void){install_show_sign=1; //用于显示计数部分}interrupt [TIM0_OVF] void timer0_ovf_isr(void) //T0溢出中断200us一溢出//Timer 0 overflow interrupt service routine{if(install_show_sign){// Reinitialize Timer 0 valueTCNT0=0x9B;if(add_sign){count++;if(count==50){count=0;decimal++;if(decimal==10){decimal=0;second++;if(minute==fen&&second==miao){if(!add_all){count=100;decimal=10;add_sign=0;}}if(second==59){second=0;minute++;if(minute==10){minute=0;}}}}}else{count--;if(count==0){count=50;decimal--;if(decimal==0){decimal=10;second--;if(second==0){if(minute==0&&second==0){count=0;decimal=0;minute=0;add_sign=1;return;}minute--;second=59;}}}}}}void main(void){uchar discode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; uchar disbuf[4];PORTB=0x00;DDRB=0xFF;PORTC=0x00;DDRC=0xFF;PORTD=0x00;DDRD=0x00;// External Interrupt(s) initialization// INT0: On// INT0 Mode: Low level// INT1: On// INT1 Mode: Low levelGICR|=0xC0;MCUCR=0x00;GIFR=0xC0;// Timer/Counter 0 initialization// Clock source: System Clock// Clock value: 500.000 kHzTCCR0=0x02;TCNT0=0x9B;// Timer(s)/Counter(s) Interrupt(s) initializationTIMSK=0x01;// Global enable interruptsSREG|=0x80;while (1){bufvalue(disbuf);display(discode,disbuf);if(PIND.7==0){fen++;while(!PIND.7);if(fen==60){fen=0;}}if(PIND.6==0){decimal=0;second=miao;minute=fen;add_sign=1;add_all=1;}}}void bufvalue(uchar *disbuf){if(install_show_sign){disbuf[0]=decimal;disbuf[1]=second%10;disbuf[2]=second/10;disbuf[3]=minute; }else{disbuf[0]=miao%10;disbuf[1]=miao/10;disbuf[2]=fen%10;disbuf[3]=fen/10;}}void display(uchar *discode,uchar *disbuf) {uchar i,weixuan=0x01;if(install_show_sign){for(i=0;i<4;i++){if(i==1||i==3) //第二位与第四位加小数点{PORTC=~weixuan;PORTB=discode[disbuf[i]]|0x80;delay_us(200);weixuan<<=1;continue;}PORTC=~weixuan;PORTB=discode[disbuf[i]];delay_us(200);weixuan<<=1;}}else{for(i=0;i<4;i++){ if(i==2) //第三位加小数点{PORTC=~weixuan;PORTB=discode[disbuf[i]]|0x80;delay_us(200);weixuan<<=1;continue;}PORTC=~weixuan;PORTB=discode[disbuf[i]];delay_us(200);weixuan<<=1;}}}七、实训总结每一次实训都给自己增加技术,和对学习成果的展现,实训结束发行自己学习的真是给力程序还是大部分不懂,但也马马虎虎做出来了,努力了就不会后悔,我有努力过,所以不管结果是什么我都有一个好的过程,过程最重要。
实验报告
实验一A VR单片机的认识实验目的:1.认识A VR单片机了解其在生活中的用途2.了解A VR单片机的管脚的基本功能3.学习单片机需要的预备知识,复习c语言;4.学习A VR单片机的一些基本外围电路;实验步骤见课件第二讲A VR 加入此图做为认识单片机的各个管脚实验二AVR单片机基本外围电路的认识实验目的:1.认识A VR最小系统板的最基本外围电路2.了解外围电路的功能和工作原理实验步骤:1原理图Atmega16单片机内含有flash程序储存器和SRAM数据存储器,故在一般的情况下不需要扩展存储器。
在Atmage16单片机的X1和X2之间加上0~8M的晶振,并通过22pF左右的电容接地为单片机的工作时钟。
2滤波电路电路有USB 供电,点位常常有波动,影响单片机的正常工作所以用两个极性电容滤去杂波。
3复位电路在RESET引脚加上低电平复位的复位电路并为单片机加上4.0~6.0v电源后单片机即可正常工作(只画图中reset的脚所带的图其他的不画)实验三A VR Studio的使用实验目的:熟悉A VR studio的编辑环境、学会安装次编辑器;实验步骤:1.A VR Studio的安装2.A VR Studio的使用(把打开A VR Studio过程写下)实验四流水灯实验实验目的:1.熟悉使用A VR Studio2.熟练掌握c语言3.任意控制流水灯4.了解A VR Studio软件实验步骤:1建立一个工程2编程跑马灯实验(把程序写出)(要有各别的语句注解,写出实现了什么功能)跑马灯.txt跑马灯 2.txt。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SystemMode = RTCTIMEMODE;
}
函数PowerOnInitial的作用是初始化按键,PCF8563,并初始化时钟的时间。
void KeyProcess(void)
{
BYTE KeyCode;
if( SystemMode == SETTINGMODE && flgFlash == TRUE ){//闪烁控制
switch( SetStep ){
case SETYEAR:
LCM1602BufferLine0[LINEONEBASIC] = ' ';
LCM1602BufferLine0[LINEONEBASIC+1] = ' ';
case SETMONTH:
if( ++PCF8563Time.PCF8563Data.Month == 12+1 ){
PCF8563Time.PCF8563Data.Month = 1;
}
break;
case SETDAY:
if( ++PCF8563Time.PCF8563Data.Day == 31+1 ){
if( ++PCF8563Time.PCF8563Data.Minute == 59+1 ){
PCF8563Time.PCF8563Data.Minute = 0;
}
break;
case SETSECOND:
if( ++PCF8563Time.PCF8563Data.Second == 59+1 ){
}
break;
case SETMINUTE:
if( --PCF8563Time.PCF8563Data.Minute == 0-1 ){
PCF8563Time.PCF8563Data.Minute = 59;
}
break;
case SETSECOND:
if( --PCF8563Time.PCF8563Data.Second == 0-1 ){
break;
default:
break;
}
}
lcd_disp_string(0,0,LCM1602BufferLine0);//更新第一行显示
lcd_disp_string(1,0,LCM1602BufferLine1);//更新第二行显示
}
函数DisplayMain的作用是通过LCM1602显示模块实时时钟。
}
break;
case ( ((1<<S3)^0xF0) )://选择按键
if( SystemMode != SETTINGMODE ){
break;
}
if( ++SetStep == (SETSECOND+1) ){
SetStep = SETYEAR;
}
break;
case ( ((1<<S2)^0xF0) )://加按键
if( SystemMode != SETTINGMODE ){
break;
}
switch( SetStep ){
case SETYEAR:
if( ++PCF8563Time.PCF8563Data.Year == 99+1 ){
PCF8563Time.PCF8563Data.Year = 0;
}
break;
PCF8563Time.PCF8563Data.Second = 0;
}
break;
default:
break;
}
break;
case ( ((1<<S1)^0xF0) )://减按键
switch( SetStep ){
case SETYEAR:
if( --PCF8563Time.PCF8563Data.Year == 0-1 ){
2)有闰年功能
三.课程设计过程
1.设计原理:
利用ATmega128内部的IIC,读写实时时钟芯片PCF8563内部的寄存器,通过PC显示出来,可通过按键,设置当前时间。
2.实验原理图:
按键部分
4个独立按键,接在PD4~PD7,通过一个电阻到地,键盘按下时为低电平,释放为高电平。
实时时钟芯片PCF8563部分
PCF8536_rd(0x02,PCF8563Time.bData,7); //读PCF8563时间
BCDToDec();// BCD码转换成十进制数
}
LCM1602BufferLine0[LINEONEBASIC] = PCF8563Time.PCF8563Data.Year/10+'0';
LCM1602BufferLine0[LINEONEBASIC+1] = PCF8563Time.PCF8563Data.Year%10+'0';
南京邮电大学
2011/2012学年第一学期
课程设计实验报告
模块名称AVR单片机课程设计
专业
学生班级
学生学号
学生姓名
指导教师李虹戴海鸿杨洁王明伟
日期: 2011年9月26日至 2011年10月20日
AVR单片机课程设计报告
一.课程设计目的
1.学习ATmega128单片机的仿真环境(AVR Studio)及C语言编程环境(ICC AVR)。
KeyCode = get_key();
switch( KeyCode ){
case ( ((1<<S4)^0xF0) )://模式选择按键
if( SystemMode == RTCTIMEMODE ){//当当前模式为显示模式
SystemMode = SETTINGMODE;//转换成设置模式
SetStep = SETYEAR;
S4S3S2S1
3)关键代码:
void PowerOnInitial(void)
{
Key_init();//初始化按键
lcd_init();//初始化LCD
PCF8563_init();//初始化PCF8563
PCF8563Time.PCF8563Data.Year = 11;
PCF8563Time.PCF8563Data.Month = 10;
break;
case SETMONTH:
LCM1602BufferLine0[LINEONEBASIC+3] = ' ';
LCM1602BufferLine0[LINEONEBASIC+4] = ' ';
break;
case SETDAY:
LCM1602BufferLine0[LINEONEBASIC+6] = ' ';
PCF8563Time.PCF8563Data.Day = 1;
}
break;
case SETHOUR:
if( ++PCF8563Time.PCF8563Data.Hour == 23+1 ){
PCF8563Time.PCF8563Data.Hour = 0;
}
break;
case SETMINUTE:
LCM1602BufferLine1[LINEONEBASIC+3] = ' ';
LCM1602BufferLine1[LINEONEBASIC+4] = ' ';
break;
case SETSECOND:
LCM1602BufferLine1[LINEONEBASIC+6] = ' ';
LCM1602BufferLine1[LINEONEBASIC+7] = ' ';
}else if( SystemMode == SETTINGMODE ){//当当前模式为设置模式
SystemMode = RTCTIMEMODE;//转换成显示模式
DecToBCD();//十进制转BCD码
PCF8536_wt_p(0x02,PCF8563Time.bData,7);//写PCF8653时间
LCM1602BufferLine1[LINETWOBASIC+3] = PCF8563Time.PCF8563Data.Minute/10+'0';
LCM1602BufferLine1[LINETWOBASIC+4] = PCF8563Time.PCF8563Data.Minute%10+'0';
实时时钟芯片PCF8563通过IIC总线连接到ATmega128的SDA和SCL总线上。
3.软件设计
1)思路如下:使用ATmega128内部TWI通过IIC总线读写实时时钟芯片PCF8563内部的寄存器实现实时时钟功能,使用四个按键设置时钟的年,月,日,时,分,秒,并把时钟显示到PC上。
2)程序流程图
LCM1602BufferLine1[LINETWOBASIC+6] = PCF8563Time.PCF8563Data.Second/10+'0';
LCM1602BufferLine1[LINETWOBASIC+7] = PCF8563Time.PCF8563Data.Second%10+'0';
PCF8563Time.PCF8563Data.Year = 99;