电子系统设计专题实验
电子系统综合设计

电子系统电子系统综合综合综合设计设计一、 实验目的验目的::本次电子设计要求学生自行完成脉宽调制法电容/电压(C/V)转换器电路设计和方波-三角波发生器电路设计,并运用电子仿真软件multisim 对所设计的电路进行分析、测试,直至测试结果符合设计要为止,使学生了解、掌握电子仿真软件multisim 的应用,并通过仿真软件的仿真结果,使学生进一步掌握脉宽调制法电容/电压(C/V)转换器和方波-三角波发生器的电路设计思路、电路结构、元器件参数的选取及计算过程,最后根据电路原理图进行电路板焊接和调试,对模拟仿真结果进行验证,从而为学生以后的科研工作打下一个坚实的基础。
二、 实验器材实验器材::电脑一套,multisim 仿真软件一套。
三、 实验进度安排实验进度安排::(1) 根据所给题目要求,自行设计电路原理图,并对电路设计原理进行分析。
(2) 运用multisim 仿真软件对电路进行仿真,用虚拟示波器观察各点波形,根据波各点波形对器件参数进行适当的修改,直道测试结果满意为止,从而加深了学生对电路设计原理的进一步掌握。
(3) 按照电路原理图焊接电路、调试电路,用示波器观察各点波形,分析测得波形与虚拟示波器观察各点波形是否一样。
四、 实验内容内容::实验一、方波-三角波发生器仿真分析实验二、脉宽调制法电容/电压(C/V)转换器仿真分析 五、 实验原理实验原理:: 实验内容一实验内容一、、方波-三角波发生器仿真分析三角波发生器仿真分析:: 设计要求:设计振荡频率为500Hz 的方波-三角波发生器,要求方波输出电压为±12V ,三角波输出电压为±6V 。
要求写出设计思路、电路结构、元器件参数的计算过程,运用multisim 仿真软件对所设计的电路进行分析、测试;若测试结果不满足设计要求,调整电路结构或改变电路元器件参数,直至测试结果符合设计要求。
设计思路:设计波形发生器电路通常考虑两个方面的因素:一是选择什么样的输出波形电路,其次是确定该电路的振荡频率。
电子系统设计实验报告aw60

竭诚为您提供优质文档/双击可除电子系统设计实验报告aw60篇一:嵌入式实验报告Aw60实验一名称:编程环境与数据排序姓名:李懿学号:1214098同组:孙垭琪实验日期:20XX.10.28一、实验目的掌握Freescale68hc08汇编语言设计和调试方法,熟悉proemulator、cw08、sD-1型嵌入式微控制器在线实验开发系统的使用方法。
二、实验内容1.实验环境pc机、Dp-01多mcu实验平台、codewarrior集成开发环境、proemulator模拟软件2.硬件接线无3.实验内容:(1)利用汇编语言编写程序,把Freescale68hc908gp32内部RAm$50~$5F单元中的16个无符号数按从小到大的顺序排列,结果放到内部RAm$60~$6F单元中,$50~$5F中数的顺序保持不变。
(2)利用c语言编程完成实验内容(选做内容)三、实验方案及流程图1.实验要求:(1)通过cwIDe或proemulator调试程序并查看运行结果。
(预习时完成)(2)利用cwIDemon08接口把程序下载到mcu实验平台,通过单步、断点等多种调试方式运行程序并查看运行结果。
(3)完成实验报告的撰写。
2.实验方案:本实验采用软件设置断点的方法完成程序调试,查验实验结果。
无须进行硬件连线。
实验采用冒泡法进行数据排序,程序流程如图1所示。
图1冒泡法排序流程图四、实验程序清单DATA1eQu$70DATA2eQu$80n1eQu$A0n2eQu$b0TempeQu$c0FLAgeQu$D0ADDRess1eQu$e0ADDRess2eQu$F0oRg$0070Dc.b$10,$20,$80,$72,$23,$32,$43,$54,$64,$76,$98,$43 ,$76,$87,$62,$62oRg$8000main:moV#$10,n2moV#$01,FLAgLDhx#DATA1sThxADDRess1LDhx#DATA2sThxADDRess2Loop:LDhxADDRess1LDA,xAIx#1sThxADDRess1LDhxADDRess2sTA,xAIx#1sThxADDRess2 DbnZn2,Loop L1:moV#$0F,n2 LDhx#DATA2 moVn2,n1 bcLR0,FLAgL2:LDA,xAIx#1cmp,xbcsL3bseT0,FLAg sTATemp LDA,xAIx#-1sTA,xAIx#1 LDATemp sTA,xL3:DbnZn1,L2bRcLR0,FLAg,L4DbnZn2,L1bRA$L4:oRg$FFFeDc.wmainenD五、实验结果及体会1、实验结果2、实验体会实验二名称:三字节(压缩bcD码形式)无符号十进制数加法程序一、实验目的掌握Freescale68hc08汇编语言设计和调试方法,熟悉proemulator、cw08、sD-1型嵌入式微控制器在线实验开发系统的使用方法。
电子系统设计实验报告

基于单片机和FPGA的等精度频率计一、设计任务工作频率通信系统极为重要的参数,频率测量是通信系统基本的参数测试之一。
本设计的主要任务是使用单片机与 EDA 技术设计制作一个简易的等精度频率测试仪,可对输入周期信号的频率进行测量、显示。
被测信号的频率范围和测试的精度要求见相应的设计任务书。
二、设计框图图 1 硬件系统原理框图等精度频率计的主系统硬件框图如图1 示,主要由以下几部分组成:(1)信号整形电路:用于对于放大信号进行放大和整流,以作为PLD 器件的输入信号(2)测频电路:是测频的核心电路模块,由FPGA 或CPLD 器件组成。
(3)单片机电路模块:用于控制FPGA 的测频操作和读取测频数据,并做出相应处理。
(4)数码显示模块:用8 个数码管显示测试结果,考虑到提高单片机I/O 口的利用率,降低编程复杂性,提高单片机的计算速度以及降低数码显示器对主系统的干扰,可以采用串行静态显示方式。
三、测频原理分析3.1 等精度频率测试的原理频率是一个基本的物理量,其它的物理量可以转换为频率进行测量。
测试频率的基本方法包括直接测频和测周法。
其中直接测频法是产生一个标准宽度(例如1s)的时基信号,然后在这个信号时间范围内打开闸门对被测频率信号进行计数。
此方法的弱点之一是高精度的标准时基信号不容易获得;其二,这种方法对于高频信号的测量精度比较有保证,但是对于低频信号由于计数周期有限测试精度较低。
测周法是用被测信号作为闸门信号、对标准脉冲信号进行计数,显然这种方法适合测量低频信号的频率。
等精度测频法的核心思想是用两个计数器分别对标准和被测脉冲进行计数,计数的时间严格同步于被测脉冲。
这种方法的最大优点是测试的精度和被测信号的频率无关,因而可以做到等精度测量。
其测试原理如图2 示。
预置闸门信号是测试命令,即测频的使能信号,该信号为高电平的期间进行测频。
但是当预置闸门信号为高电平时,测频并不是立即开始,而是要等到被测信号的上升沿到来以后,实际闸门信号跳为高电平,测频才真正开始。
电子系统设计实验指导书(FPGA基础篇Vivado版)

实验指导书(FPGA 基础篇 Vivado 版)
东南大学 电子科学 ........................................................................................................................................................... 1
安全使用规范
东南大学 电子科学与工程学院
无论何时,外部电源供电与 USB 两种供电方式只能用其中一种,避免因为电压有所差别而烧坏电路板。 采用电压高于5.5V的任何电源连接器可能造成永久性的损害。 插拔接插件前请关闭电路板总开关,否则易损坏器件。 电路板应在绝缘平台上使用,否则可能引起电路板损坏。 不同编码机制不要混接。 安装设备需防止静电。 液晶显示器件或模块结雾时,不要通电工作,防止电极化学反应,产生断线。 遇到正负极连接时需谨慎,避免接反引起开发板的损坏。 保持电路板的表面清洁。 小心轻放,避免不必要的硬件损伤。
实验目的 ....................................................................................................................................................... 17 实验内容 ....................................................................................................................................................... 17 实验要求 ....................................................................................................................................................... 17 实验步骤 ....................................................................................................................................................... 17 实验结果 ....................................................................................................................................................... 22
直流稳压电源实验报告

直流稳压电源的设计实验报告电子系统设计专题实验一信息24班赵恒伟2120502099一、电源稳定问题的提出:各种用电设备对供电质量都有一定要求,这些要求包括供电电源为交流还是直流、电压额定值及其变化范围、最大功率等。
这里研究对象是输出为直流的稳压电源。
该作用由下图说明:Ui (不稳定) Uo (稳定) R 当出入电压Ui 变化或负载R 变化时,稳压电源的输出都应保持稳定。
对于大多数功率较小的直流电源大多数都是将50Hz 的交流电经过整流、滤波和稳压后获得。
整流电路用来将交流电变换为单向脉动的直流电压;滤波电路用来滤除整流后单向脉动电压中的交流成分,使之成为平滑的直流电压;稳压电路的作用是当输入交流电源电压波动、负载和温度变化时,维持输出直流电压的稳定. 在本设计中,可以实现将220v 的交流电压经过整流,滤波,稳压最终可实现输出电压+5V 的直流稳压电源。
本设计的主要内容是围绕着如何设计和实现各个部分而展开的。
二、 实验原理框图概述通过我们模拟电子技术理论课的学习我们知道,单相交流电要经过电源变压器、整流电路、滤波电路还有稳压电路才能转换成稳定输出的直流电压。
它的总体功能方框图和各个电路部分输出电压的波形如下1图和图2所示:50Hz u 1u 2u 3u 4u 0u 1 u 2 u 3 u 4 u 00 t 0 t 0 t 0 t 0 t(a ) (b) (c) (d) (e) (图2,各个电路部分输出电压波形)电源变压器整流电路滤波电路稳压电路~220V直流电压(图1,直流稳压电源总体功能框图)其中,(a)为输入的220V电压波形;(b)为电压器降压后的波形;(c)整流后的电压波形;(d)滤波后的电压波形;(e)最后输出的直流稳压电源波形。
我们知道,直流电源的输入为220v的市电,因而需要电源变压器降压后,再对交流电压进行处理。
变压器副边电压经过整流电路从交流电压转换为直流电压,为较小电压的脉动,需通过低通滤波电路滤波,是输出电压平滑。
电子系统设计实验报告

实验报告格式要求二.实验目的、任务和要求:本实验要求设计SCI串行接口芯片, 其功能包括串行及并行数据的接收和互相转换。
三.实验系统结构设计分析1.模块划分思想和方法:该芯片需根据功能分为串并转换电路和并串转换电路两部分。
实现串并转换的关键器件就是移位寄存器, 其功能可以使串行输入的数据先寄存到一个位矢量中, 等到一组数据全部输入完毕后再一起处理, 并行输出。
而实现并串转换的关键器件是锁存器, 它可以将并行输入的数据先锁存起来, 再一位一位的转化成串行数据。
计数器在这一芯片中也起到了重要作用, 因为计数器可以产生时间脉冲的分频, 用于配合时间脉冲控制各器件的工作。
2.各模块引脚定义和作用.串并电路:输入: rxd读入数据, clk系统时钟, reset计数器复位端, rd读入控制四进制计数器:C4四分频十进制计数器:Count_10计数分量, C10四十分频(c4的十分频)移位寄存器:Read读入数据, d0~d9并行输出(d0起始端, d1~d8数据端, d9校验位(本实验中不起作用))锁存器:K0~k7数据位状态发生器:RdST读入状态(0为读入, 1为寄存器已满)四.实验代码设计以及分析:1.给出模块层次图;2.按模块完成的代码及注释.USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCI ISPORT(cs,rxd,clk,SCIrd,reset,SCIwr,in7,in6,in5,in4,in3,in2,in1,in0: IN STD_LOGIC;rdFULL,tdEMPTY,c4:buffer std_logic;e7,e6,e5,e4,e3,e2,e1,e0,wxd:OUT STD_LOGIC);END SCI;ARCHITECTURE WORK OF SCI ISSIGNAL wr,rd,read,c10,d9,d8,d7,d6,d5,d4,d3,d2,d1,d0,k7,k6,k5,k4,k3,k2,k1,k0,mid: STD_ULOGIC;SIGNAL wri : STD_LOGIC_vector(7 downto 0);SIGNAL count_10 ,counter_8:std_logic_vector(3 downto 0);BEGINPROCESS(cs)BEGINrd<=cs OR SCIrd;wr<=cs OR SCIwr;END PROCESS;//注释: 片选输入, cs=1时, 串入并出为“写”, 并入串出为“读”;cs=0时, 串入并出为“读”, 并入串出为“写”;PROCESS(rxd)BEGINread<=rxd;END PROCESS;PROCESS(clk)VARIABLE count_4 : STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINIF(clk'EVENT AND clk='1')THENIF(count_4="00")THENcount_4 := "01";c4 <= '1';ELSIF(count_4="01")THENcount_4 := "11";c4 <= '1';ELSIF(count_4="11")THENcount_4 := "10";c4 <= '0';ELSIF(count_4="10")THENcount_4 := "00";c4 <= '0';END IF;END IF;END PROCESS;PROCESS(c4)BEGINIF(c4'EVENT AND c4='1')THENIF(rd='1')THENd0<=read;d1<=d0;d2<=d1;d3<=d2;d4<=d3;d5<=d4;d6<=d5;d7<=d6;d8<=d7;d9<=d8;END IF;END IF;END PROCESS;PROCESS(c4,reset,rd)BEGINIF(reset='0' OR rd='0')THEN count_10<="0000";c10 <= '0';ELSIF(c4'EVENT AND c4='1')THENIF(count_10="0000" AND rxd='1' AND rdFULL='0')THEN count_10 <= "0001";c10 <= '0';ELSIF(count_10="0001")THENcount_10 <= "0010";c10 <= '0';ELSIF(count_10="0010")THENcount_10 <= "0011";c10 <= '0';ELSIF(count_10="0011")THENcount_10 <= "0100";c10 <= '0';ELSIF(count_10="0100")THENcount_10 <= "0101";c10 <= '0';ELSIF(count_10="0101")THENcount_10 <= "0110";c10 <= '0';ELSIF(count_10="0110")THENcount_10 <= "0111";c10 <= '0';ELSIF(count_10="0111")THENcount_10 <= "1000";c10 <= '0';ELSIF(count_10="1000")THENcount_10 <= "1001";c10 <= '0';ELSIF(count_10="1001")THENcount_10 <= "1010";c10 <= '0';ELSIF(count_10="1010")THENcount_10 <= "1011";c10 <= '1'; END IF;END IF;END PROCESS;PROCESS(c10)BEGINIF(c10'EVENT AND c10='1')THENk7<=d8;k6<=d7;k5<=d6;k4<=d5;k3<=d4;k2<=d3;k1<=d2;k0<=d1;END IF;END PROCESS;PROCESS(rd)BEGINIF(rd='0')THENe7<=k7;e6<=k6;e5<=k5;e4<=k4;e3<=k3;e2<=k2;e1<=k1;e0<=k0;END IF;END PROCESS;PROCESS(rd,c10)BEGINIF(rd='0')THEN rdFULL<='0';ELSIF(c10='1')THENrdFULL<='1';ELSE rdFULL<='0';END IF;END PROCESS;process(wr)beginif(wr='0')thenwri(0)<=in0;wri(1)<=in1;wri(2)<=in2;wri(3)<=in3;wri(4)<=in4;wri(5)<=in5;wri(6)<=in6;wri(7)<=in7;end if;end process;process(c4)beginif(c4'event and c4='1')thenif(wr='0')thencounter_8<="0000";elsif(wr='1' and counter_8="0000")then counter_8<="0001"; elsif(counter_8="0001")then counter_8<="0010";elsif(counter_8="0010")then counter_8<="0011";elsif(counter_8="0011")then counter_8<="0100";elsif(counter_8="0100")then counter_8<="0101"; elsif(counter_8="0101")then counter_8<="0110";elsif(counter_8="0110")then counter_8<="0111";elsif(counter_8="0111")then counter_8<="1000";elsif(counter_8="1000")then counter_8<="1001";end if;end if;end process;process(wr,counter_8)beginif(wr='1' and counter_8="1001")thenmid<='1';tdEMPTY<='1';elsif(wr='0')thenmid<='0';tdEMPTY<='0';end if;end process;process(counter_8)beginif(wr='0' or mid='1')thenwxd<='0';elsif(wr='1' and mid='0')thenif(counter_8="0001")thenwxd<=wri(0);elsif(counter_8="0010")thenwxd<=wri(1);elsif(counter_8="0011")thenwxd<=wri(2);elsif(counter_8="0100")thenwxd<=wri(3);elsif(counter_8="0101")thenwxd<=wri(4);elsif(counter_8="0110")thenwxd<=wri(5);elsif(counter_8="0111")thenwxd<=wri(6);elsif(counter_8="1000" )thenwxd<=wri(7);end if;end if;end process;END WORK;五.仿真图(输入输出波形)以及分析:六.实验问题分析和经验总结:在该实验的设计中, 我们发现时序逻辑中最重要的部分就是时间信号对各进程的控制, 因为为了保持各进程在时间上的同步性和正确性, 需要用一个或几个相关联的时间信号来控制各进程。
电子系统设计实验报告

电子系统设计实验报告电子系统设计实验报告引言:电子系统设计是现代科技领域中非常重要的一部分,它涉及到电子元件、电路设计、信号处理等多个方面的知识。
本次实验旨在通过设计一个简单的电子系统来加深对电子系统设计的理解和掌握。
实验目的:本次实验的目的是设计一个基于Arduino的温度监测系统。
通过该系统,能够实时监测环境温度并将数据显示在LCD屏幕上。
实验器材:1. Arduino开发板2. 温度传感器3. LCD显示屏4. 连接线等实验步骤:1. 首先,将温度传感器与Arduino开发板连接。
将传感器的VCC引脚连接到5V引脚,GND引脚连接到GND引脚,将信号引脚连接到Arduino的A0引脚。
2. 接下来,连接LCD显示屏。
将显示屏的VCC引脚连接到5V引脚,GND引脚连接到GND引脚,将SDA引脚连接到A4引脚,SCL引脚连接到A5引脚。
3. 在Arduino开发环境中编写代码。
首先,需要包含所需的库文件,如LiquidCrystal_I2C库和Wire库。
然后,定义温度传感器引脚和LCD显示屏的相关参数。
接着,在setup函数中初始化LCD显示屏,并设置显示屏的列数和行数。
在loop函数中,通过调用温度传感器库函数获取环境温度,并将其显示在LCD屏幕上。
4. 将Arduino开发板与电脑连接,并上传代码到开发板上。
5. 实验完成后,观察LCD屏幕上的温度显示,确保温度监测系统正常工作。
实验结果:经过实验,我们成功设计并实现了一个基于Arduino的温度监测系统。
该系统能够准确地测量环境温度,并将数据实时显示在LCD屏幕上。
通过该系统,我们可以方便地监测环境温度的变化。
实验总结:通过本次实验,我们对电子系统设计有了更深入的了解。
我们学会了如何使用Arduino开发板和相关传感器进行电子系统的设计。
同时,我们也掌握了如何编写代码并将其上传到开发板上。
这些技能对于今后从事电子系统设计工作将非常有帮助。
电子系统设计实验指导书(FPGA基础篇Vivado版)

东南大学 电子科学与工程学院
安全使用规范
无论何时,外部电源供电与 USB 两种供电方式只能用其中一种,避免因为电压有所差别而烧坏电路板。 采用电压高于5.5V的任何电源连接器可能造成永久性的损害。 插拔接插件前请关闭电路板总开关,否则易损坏器件。 电路板应在绝缘平台上使用,否则可能引起电路板损坏。 不同编码机制不要混接。 安装设备需防止静电。 液晶显示器件或模块结雾时,不要通电工作,防止电极化学反应,产生断线。 遇到正负极连接时需谨慎,避免接反引起开发板的损坏。 保持电路板的表面清洁。 小心轻放,避免不必要的硬件损伤。
2
东南大学 电子科学与工程学院
assign c2=a|b; assign c3=~a; assign c4=~(a&b); assign c5=~(a|b); assign c6=a^b; endmodule 寄存器传输描述方式源程序: module gate(a,b,c1,c2,c3,c4,c5,c6); input a,b; output c1,c2,c3,c4,c5,c6; reg c1,c2,c3,c4,c5,c6; always@(a or b) begin case({a,b}) 2'b00: begin c1<=0;c2<=0;c3<=1;c4<=1;c5<=1;c6<=0; end 2'b01: begin c1<=0;c2<=1;c3<=1;c4<=1;c5<=0;c6<=1; end 2'b10: begin c1<=0;c2<=1;c3<=0;c4<=1;c5<=0;c6<=1; end 2'b11: begin c1<=1;c2<=1;c3<=0;c4<=0;c5<=0;c6<=0; end default: begin c1<=0;c2<=0;c3<=0;c4<=0;c5<=0; c6<=0; end endcase end endmodule (1) 进行语法检查和综合编译。 (2) 编写 testbench,进行时序仿真。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子系统设计专题实验报告——AVR单片机基础实验学院:电信学院班级:计算机14学号:***********名:**一、实验目的和要求本实验课程的主要目的是通过一个新型嵌入式单片机为核心的应用系统设计,掌握微型计算机硬件系统结构基本原理,软件开发编程方法,外围接口电路的组成和应用编程技术,以及电子系统设计的相关技术。
通过课程实践训练,能够独立实现一个完整的计算机应用系统设计。
要求基本实验部分学习单片机系统的基本硬件组成原理和软件程序设计方法;综合设计实验要求根据题目需求自行设计系统硬件组成电路,并设计实现完成相应功能的应用程序调试任务。
二、实验设备及开发环境以AVR ATmega128单片机为核心的实验开发系统。
实验开发板采用技术性能优良的AVR ATmega128单片机作为核心器件,还特别设计了USB接口模块、Ethernet网络接口模块,还有MCU对外扩插槽,可为电路扩展模块提供必要的准备。
AVR单片机实验开发系统实验测试环境:1.软件开发平台: PC机WindowsXP操作系统;AVR Studio 4.16 集成开发软件;WinAVR 20080610 C语言编译器;2.下载编程工具: JTAG ICE mkII在线仿真器;3.测试目标板: ATmega128实验开发板;4.测试程序:用C语言编写电路功能测试程序,在WinAVR(GCC)+AVR Studio编译下通过。
三、实验设计题目及实现的功能实验一:单片机实验系统开发环境学习1. 熟悉实验电路的结构原理、元器件名称、作用及相应的接口连接;2. 学会使用C编译器编辑、编译、调试简单C源程序;3. 学会使用AVR Studio集成开发软件下载调试并得到正确结果;4. 熟悉蜂鸣器电路的编程原理实验程序源代码:#include <avr/io.h> // I/O端口寄存器配置文件,必须包含#include <util/delay.h> // 延时函数调用文件int main(void) // GCC中main文件必须为返回整形值的函数,没有// 参数{PORTE = 0X80; // PORTE输出高电平,使蜂鸣器不响DDRE = 0X08; // 配置端口PE3为输出口while(1){PORTE &= ~(1 << PE3); //PE3置“0”,但是这种设置方法不改变PE口其余位//的状态,平时程序中推荐这种使用方法 _delay_ms(100); // 延时100毫秒_delay_ms(100);_delay_ms(100);_delay_ms(100);_delay_ms(100);PORTE |= (1 << PE3); //使PE3输出高电平,蜂鸣器不响_delay_ms(100);_delay_ms(100);_delay_ms(100);_delay_ms(100);_delay_ms(100);PORTE &= ~(1 << PE3);_delay_ms(100);_delay_ms(100);_delay_ms(50);PORTE |= (1 << PE3);_delay_ms(100);_delay_ms(100);_delay_ms(50);PORTE &= ~(1 << PE3);_delay_ms(100);_delay_ms(100);_delay_ms(50);PORTE |= (1 << PE3);_delay_ms(100);_delay_ms(100);_delay_ms(50);}}实验二:LED指示灯循环显示程序设计实验1. 熟悉LED指示灯电路原理图;2. 学会单片机C语言I/O端口编程控制方法;3. 学会外部显示部件LED灯的软件编程使用方法;4. 进一步熟悉单片机实验开发系统的使用。
实验程序源代码:#include <avr/io.h>#include <util/delay.h>#include "led.h"void LED_Init(){PORTB = PB_MASK;DDRB = PB_MASK;PORTC |= _BV(LED_CS);DDRC |= _BV(LED_CS);}int main(){int i;int m;uint8_t led_sel;LED_Init();while(1) {i = 0;led_sel = 0x01;while(i < 3) {PORTB = ~led_sel;_delay_ms(800);if(led_sel == 0x80) {led_sel = 0x01;++i;}elseled_sel *= 2;}i = 0;led_sel = 0x80;while(i < 3) {PORTB = ~led_sel;_delay_ms(800);if(led_sel == 0x01) {led_sel = 0x80;++i;}elseled_sel /= 2;}i = 0;m = 0;led_sel = 0xaa;while(i < 3) {PORTB = ~led_sel;_delay_ms(800);if(m==8){m=0;++i;}if(led_sel==0x00){led_sel=0xaa;}led_sel /= 2;++m;}i = 0;m = 0;led_sel = 0x55;while(i < 3) {PORTB = ~led_sel;_delay_ms(800);if(m==8){m=0;++i;}if(led_sel==0x00){led_sel=0x55;}led_sel *= 2;++m;}for(i = 0; i < 3; ++i) {PORTB |= PB_MASK;_delay_ms(500);PORTB &= ~PB_MASK;_delay_ms(500);}}return 0;}实验三:数码管动态显示程序设计1. 熟悉单片机数码管电路结构原理;2. 学会单片机C语言I/O端口编程控制方法;3. 学会外部显示部件LED灯的软件编程使用方法;4. 学会单片机开发系统的软件调试方法。
实验程序源代码:#include <avr\io.h>#include <util\delay.h>#include "digitron.h"uint8_t code[10] = { 0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90 }; //存储0至9的显示代码void DIG_Init() //初始化端口{PORTB = ~PB_MASK;DDRB = PB_MASK;PORTG &= 0x00;DDRG |= _BV(DIG_CS1) | _BV(DIG_CS2);}void LED_Flash(int i,int com){ //闪烁一个字符PORTG |= _BV(DIG_CS2);PORTG &= ~_BV(DIG_CS1);PORTB = code[i];PORTG |= _BV(DIG_CS1);PORTG &= ~_BV(DIG_CS2);PORTB = com;PORTG &= ~_BV(DIG_CS1);PORTG &= ~_BV(DIG_CS2);_delay_ms(1);}void LED_display(int s[8]){ 显示输出for(int i = 0; i < 100; ++i) {LED_Flash(s[7],128);LED_Flash(s[6],64);LED_Flash(s[5],32);LED_Flash(s[4],16);LED_Flash(s[3],8);LED_Flash(s[2],4);LED_Flash(s[1],2);LED_Flash(s[0],1);}}int main(){int sum[] = {0,0,0,0,0,0,0,0}; //存储显示数字DIG_Init();while(1){LED_display(sum);sum[7]++;for(int i=7;i>0;--i){ //循环进位if(sum[i]==10){sum[i]=0;sum[i-1]++;}}if(sum[0]==10){sum[0]=0;}}return 0;}实验四:定时/计数器中断应用程序设计熟悉单片机内部定时/计数器的工作原理;了解单片机中断机制工作原理;掌握单片机中断服务程序的设计方法;了解定时计数器的功能及应用。
实验程序源代码:#include <avr/io.h>#include <avr/interrupt.h>#include <avr\io.h>#include <util\delay.h>#include "digitron.h"uint8_t code[10] = { 0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90 };int sum[] = {0,0,0,0,0,0,0,0};void DIG_Init(){PORTB = ~PB_MASK;DDRB = PB_MASK;PORTG &= 0x00;DDRG |= _BV(DIG_CS1) | _BV(DIG_CS2);}void LED_Flash(int i,int com){PORTG |= _BV(DIG_CS2);PORTG &= ~_BV(DIG_CS1);PORTB = code[i];PORTG |= _BV(DIG_CS1);PORTG &= ~_BV(DIG_CS2);PORTB = com;PORTG &= ~_BV(DIG_CS1);PORTG &= ~_BV(DIG_CS2);_delay_ms(1);}void LED_display(int s[8]){for(int i = 0; i < 125; ++i) {LED_Flash(s[7],128);LED_Flash(s[6],64);LED_Flash(s[5],32);LED_Flash(s[4],16);LED_Flash(s[3],8);LED_Flash(s[2],4);LED_Flash(s[1],2);LED_Flash(s[0],1);}}SIGNAL(SIG_OUTPUT_COMPARE1A){TCNT1H = 0x00; //T/C1计数值清零TCNT1L = 0x00;//对PE3取反,0.5秒改变一次if(PORTE & _BV(PE3))PORTE &= ~_BV(PE3); //输出低电平elsePORTE |= (1<<PE3); //输出高电平DIG_Init();while(1){LED_display(sum);sum[7]++;for(int i=7;i>0;--i){if(sum[i]==10){sum[i]=0;sum[i-1]++;}}if(sum[0]==10){sum[0]=0;}if(sum[7]==0&&sum[6]==6){sum[7]=0;sum[6]=0;sum[5]++;}if(sum[5]==0&&sum[4]==6){sum[5]=0;sum[4]=0;sum[3]++;}if(sum[3]==0&&sum[2]==6){sum[3]=0;sum[2]=0;sum[1]++;}sum[0]=0;sum[1]=0;}}//主程序int main(void){DDRE = _BV(PE3); //初始化端口PE3为输出模式PORTE &= _BV(PE3); //输出高电平,蜂鸣器禁止发声TCCR1B = 0x00; //中断控制寄存器清零,停止T/Cl计数OCR1AH = 0x3D; //设置8MHz、256分频、定时0.5s的比较值,OCR1AL = 0x09; //与TCNTl的计数值进行比较,若匹配产生中断TCCR1A = 0x00; //T/C1普通端口模式TCCR1B = 0x04; //启动定时器T/C1,256分频TIMSK |= 0x10; //使能C/Tl比较匹配中断sei(); //允许全局中断while(1); //等待中断的发生return 0;}实验五:LCD字符图形显示程序设计1. 熟悉单片机字符图形显示电路工作原理;2. 了解LCD12864字符图形显示部件的工作原理;3. 学会单片机控制字符图形显示的程序设计方法;4. 学会单片机应用系统的人机界面软件设计方法。