《交通灯的控制.ppt》由会员分享,可在线阅读,更多相关《交通灯的控制.ppt(122页珍藏版)》请在三一文库上搜索。
1、单片机应用技术,主讲:桂绍勇,项目一:交通灯控制系统,知 识 要 点,1.初步认识单片机,了解AVR系列单片机内部基本结构和工作原理; 2.理解ATmega16单片机内部资源组成; 3.理解输入检测、输出控制原理; 4.理解LCD显示原理; 5.掌握LED显示原理,SPI接口通讯原理。,技 能 目 标,1.能说出单片机的基本结构、工作原理、作用及应用场合; 2.能利用单片机检测信号输入和控制信号输出; 3.能独立使用软、硬件开发工具设计单片机控制系统; 4.能进行简单项目应用的需求分析、方案设计与实施、项目评估等工作。,1.1 项目设计说明 1.2 子任务一:开关控制指示灯 1.3 子任务二:
2、交通灯控制 1.4 子任务三:LCD参数显示 1.5 子任务四:参数设置 1.6 子任务五:LED数码管显示 1.7 项目设计与实现 1.8 小结,目 录,1.1 项目设计说明,1. 设计目的: 掌握人机界面的应用方法。 2. 设计内容: 利用单片机设计并实现公路十字路口交通灯的控制系统。,讨论: 如何实现该项目? 灯怎么点亮? 怎么延时? 怎么变灯? ,CPU,1.1.1 计算机体系结构,一、冯诺依曼体系结构 也称 普林斯顿 结构。,1、冯诺依曼型计算机逻辑结构的三层含义: 计算机包含:运算器、控制器、存储器、输入设备和输出设备5大基本部件; 计算机内部采用二进制形式表示指令和数据; 事先将
3、编好的程序和数据存入存储器中,计算机工作时能够自动高速地从存储器中提取指令并执行。,为何计算机中采用二进制? (1)二进制的0和1两个数码,在电子电路中很容易用电压的高低和脉冲的有无来表示实现; (2)二进制数的运算规律简单,易于电路实现; (3)逻辑判断方便,0和1正好与逻辑“假”和“真”对应, 为计算机实现逻辑运算和程序中逻辑判断提供了便利条件。,2、运算器 执行部件。是进行信息加工、算术运算和逻辑运算的场所,核心是算术逻辑单元ALU(Arithmetic Logical Unit)。 3、控制器 是计算机的指挥控制中心。控制和协调整机各部件有条不紊的自动工作。 4、输入设备 将人熟悉的信
4、息转换成机器内部能够识别的二进制信息。 5、输出设备 将计算机处理信息的结果转换成人或其它机器能够识别的信息形式。,6、存储器 是冯.诺依曼原理的核心,用于存放程序和数据的部件。,内存储器(主存):少,快; 外存储器(辅存):多,慢; Cache(高速缓冲存储器):用于解决CPU与内存之间的速度不匹配; 主存由若干各存储单元组成,每个单元可存放若干二进制信息(一般是字节的偶数倍)。全部存储单元统一编号,称为地址。(地址与存储单元一一对应,CPU按单元地址来访问每一存储单元。) 指令数码化以后,就可以和数据一样放入存储器,存储器的任何位置既可以存放数据也可以存放指令,不过一般将指令和数据分开存放
5、。,二、哈佛结构 哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。,三、指令系统 一台计算机的全部机器指令的集合构成了指令系统。 1、CISC(复杂指令集) 2、RISC(精简指令集) Intel的Pentium系列和AMD的K6系列都经过RISC改良,以RISC为核心,通过译码器转换为对外CISC结构。,1.1.2 单片机及其发展,一、单片机 将运算器、控制器、存储器、输入设备以及输出设备集成在一颗芯片(IC)上的半导体器件。,将许多原来分离的部件都集中在一颗芯片上。,二、单片机与单片机系统,三、单片机的开发语言,C、C+、Basic,ASM、MASM,四、单片机的发展 1974年,
6、美国Fairchild公司研制出世界上第一台单片机F8。 第一代第四代单片机。,1.1.3 单片机的特点与应用,一、单片机的特点 控制系统在线应用 软硬件结合 应用现场环境恶劣 二、单片机的应用领域 自动控制 (如汽车、数控装置) 智能仪表 数据采集 (电表) 计算机外设 (打印机、交换机) 民用电器 (MP3、洗衣机) 军事装置,课外作业一: 1.通过互联网、书籍等手段,了解并列举至少三家单片机厂家以及其最具代表性单片机型号; 2.通过互联网、书籍等手段,了解至少三种单片机应用的场合及应用实例。,1.1.4 AVR系列单片机,一、AVR系列单片机简介 AVR单片机是美国Atmel公司1997
7、年推出的精简指令集(RISC)单片机。AVR(Advance RISC)。 二、AVR系列的系统结构,1.中央处理器(CPU) 运算器 控制器,2、数据存储器 RAM(AVR中用的是SRAM)、EEPROM 二者的含义、作用、及之间的区别。 3、程序存储器 Flash(可擦写1000次以上) 4、定时/计数器 T/C0、T/C1、T/C2 5、并行I/O,6、串行I/O UART(异步串行)、SPI(主/从同步收/发) 7、中断控制系统 内部中断和外部中断 中断系统的作用 8、时钟系统 9、总线 数据总线(8bit)、指令总线(16bit),三、AVR系列单片机的选型,ATmega16是一款R
8、ISC低功耗CMOS的8位高性能单片机。接近1MIPS/MHz的性能。 CMOS (Complementary Metal Oxide Semiconductor 互补金属氧化物半导体) 16位指令总线,8位数据总线 MIPS(每秒百万条指令),1.1.5 ATmega16芯片详解,一、ATmega16芯片外观,mil:千分之一寸,二、ATmega16内部结构,三、ATmega16芯片封装与引脚功能,ATmega16有44脚的TQFP封装和40脚的PDIP封装两种。,教材P23页。,未完待续。,1.2 子任务一 开关控制指示灯,任务要求: 利用ATmega16/32单片机来实现开关对LED点亮
9、与熄灭的控制功能。,推荐电路:,1.2.1 并行接口概述,单片机控制外部设备时,常常向外部设备输出控制命令(输出),或检测外部设备工作状态(输入)。此时,单片机的I/O端口起到重要的作用。 串行通讯:信息的各bit数据被逐位通过一条信道(引脚)按顺序传送的通讯方式。 并行通讯:各bit数据按照字长通过多条信道同时传送的通讯方式。,一、并行输入工作原理 并行输入接口某一位的简化电路如图所示:,010111,通过RP控制数据的读入: 1、RP0时,三态门为高阻态,数据总线无输入; 2、RP1时,三态门输出等于输入,数据从引脚被读入数据总线。,二、并行输出工作原理 并行输出接口某一位的简化电路如图4
10、-2所示:,通过WP控制数据的输出: 1、WP0时,数据锁存器Q不受D影响,输出无效; 2、WP1时,输出端Q等于输入端D,数据输出到引脚。,上拉管(电阻)的作用: 1、稳定输出; 2、增强驱动能力; 3、抗干扰; ,三、并行输入/出接口工作原理 并行输入/出某一位的简化接口电路如图所示:,图3: I/O接口等效电路,三态门1,三态门2,缓冲驱动器,方向锁存器,引脚,上拉管,三态门3,缓冲器,数据总线,数据锁存器,输入电路 (等效于图1),输出电路 (等效于图2),控制电路,Atmega16单片机有A、B、C、D四个8位并行I/O接口。 一、I/O控制寄存器(宏) 当A、B、C、D接口用于数据
11、I/O口时,通过DDRx、PORTx和PINx三个宏控制接口的输入与输出(其中x为A、B、C或D)。,注:PINx为只读。,其中: DDRx为接口数据方向寄存器,用来定义通讯方向(输入/输出); PORTx为接口数据寄存器,用来输出数据; PINx用来读取接口数据(只读)。,1.2.2 ATmega16并行I/O资源,1.DDRx 当DDRx的某位为0时,送到方向锁存器的输出端为0,相应位(引脚)只能作输入; 当DDRx的某位为1时,送到方向锁存器的输出端为1,相应位(引脚)只能作输出。 2.PORTx 端口作输出时:PORTx的某位为0时,表示初始电平为低电平,反之为高电平; 端口作输入时:
12、PORTx的某位为0时,表示不启用内部上拉电阻,反之为启用。 3.PINx 当DDRx的某位为0时,表示输入为低电平状态,反之为高电平状态。,如程序段: char a; a=0x11; /00010001 DDRA=0xFF; /PA口的8脚都作输出 PORTA=a; /将a的值通过PA口输出 又如: char a; DDRC=0x0; /PC口作为输入 PORTC=0x0F; /低4位使用内部上拉电阻,高4位不使用 a=PINC; /读取C口的值到变量a,二、端口的控制,1.以端口为单位,如程序段: DDRA.0=0; /将PA口第0脚设置为输入 DDRC.2=1; /将PC口第2脚都作输出
13、 PORTC.2=0; /PC口第2脚输出低电平 PORTA.0=1; /PA口第0脚使用内部上拉电阻 又如: bit a=1, b=0; DDRB.4=b; /PC口的第4脚作为输入 PORTC.2=b; /从PC口第2脚输出变量b的值 b=PINA.0; /读取PA口第0脚的值到变量b,2.以引脚为单位,bit:CodeVisionAVR C中专用的位变量,三、位运算(补充) 位运算符有: &、|、 1、&(按位“与”) 运算规则:全1为1,有0则0。 1 0 0 1 0 0 0 1 & 0 1 1 1 1 0 0 1 0 0 0 1 0 0 0 1 如:a&b、c&0x0F、0x0F&0
14、xF0,2、|(按位“或”) 运算规则:有1为1,全0则0。 1 0 0 1 0 0 0 1 | 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 如:a|b、 c|0x0F、0x0F|0xF0 3、(按位“反”) 1 0 0 1 0 0 0 1 0 1 1 0 1 1 1 0 如:a、b、 0xFF、 0xF0,4、(按位“异或”) 运算规则:相同为0,不同为1。 1 0 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 0 1 0 0 0 如:ab、 c0x0F、0x0F0xF0 5、(“左移”) 1 0 1 1 1 1 0 0 1 1 1 1 1 0 0
15、1 0 低位补0 如:a1、b2、0x0F3,6、(“右移”) 1 1 0 0 1 0 0 0 1 1 1 0 0 1 0 0 0 正数:高位补0 负数:高位补1 如:a1、b3、0xF04,一、单片机系统开发调试过程,1.2.3 系统开发与调试过程,二、软件开发调试过程 相应的开发工具很多,如:ATmanAVR、CodeVisionAVR C、AVR C、和ICCAVR等软件,本课程以CodeVisionAVR C作为开发调试工具。 单片机软件开发工作流程如下图:,1.2.4 配套实验装置,电源插座,电源开关,88点阵 显示器,发光二极管 E1E8,开关 K1K8,1K8电阻引脚引出接口,7
16、219控制 引出接口,K1K8开关 引出接口,E1E8发光二极管引脚引出接口,44键盘引脚引出接口,44矩阵键盘 J04J07 J14J17 J24J27 J34J37,LCD显示器控制引脚引出接口,8位LED位控引脚引出接口,8位LED段控引脚引出接口,7219位控引脚引出接口,7219段控 引脚引出接口,8位LED 显示器,88点阵显示器行控制引脚引出接口,88点阵显示器列控制引脚引出接口,直流稳压电源,LCD显示器,PD口引脚 引出接口,PB口引脚 引出接口,PC口引脚 引出接口,PA口引脚 引出接口,ATmega16,程序下载 接口,异步串行 UART接口,系统复位按钮,MAX7219
17、芯片,液晶显示背光调节电阻,1.2.5 CodeVisionAVR C集成开发环境,一、CodevisionAVR C IDE CodevisionAVR C集成开发环境(Integrated Development Environment,简称IDE),二、工程的概念 1、C源程序文件 原来在Turbo C 2.0环境下,可以针对某一单一的C源程序文件开发程序;单现在使用CodevisionAVR C开发环境不再是这样了。 2、C源程序工程 CodevisionAVR中的工程(也称“项目”)是一组C源程序文件和编译器设置的集合,其扩展名为*.prj。 三、打开工程文件 可以选择File-Op
18、en菜单命令或直接点击工具栏上的 按钮来打开某一已存在的工程。 工程被打开后,可以在“导航栏”中浏览该工程的组成,如图。 IDE主窗口中会显示出本工程所处的绝对路径。,四、打开文件 可以用鼠标双击导航栏中的某一个文件以打开进行编辑。 可以选择File|Open菜单命令或直接点击工具栏上的 按钮来打开任一其它文件(在打开对话框的“文件类型”中进行选择)。 五、关闭工程 可以选择File|Close Project菜单命令关闭已打开的工程。 六、关闭文件 当某一文件的窗口处于激活状态时,可以选择File|Close菜单命令关闭该文件,或直接关闭该窗口。,七、新建文件或项目 可以选择File|New
19、菜单命令或直接点击工具栏上的 按钮新建文件或项目。,选择“Source”可新建一文件,选择“Project”可新建一工程。 选择新建工程后,如果在不采用CodeWizardAVR向导进行工程新建工作,则只会生成一空工程框架。如果采用CodeWizardAVR向导生成工程,则随后会出现工程配置对话框。,八、向工程中添加或删除文件 选择Project|Configure菜单项,可以调出工程设置对话框。 可以在工程设置对话框中,点击“Add”按钮向当前工程中加入文件;也可以先选择左边工程文件列表中的某一文件后,点击“Remove”按钮将此文件从工程中移除。,九、CodeWizardAVR代码生成器
20、在上述新建工程操作时,如果前述向导选择对话框中选择采用CodeWizardAVR方式,则会弹出下图对话框:,在对话框中,可以对芯片的类型、工作频率、I/O端口、外部中断等参数进行设置,之后的代码会依据相应设置自动生成。,1.Chip选项 在Chip选项栏中,可以对芯片型号、工作晶振频率等参数进行设置。 2.Ports选项 在Ports选项栏中,可以对ATmega16的A、B、C、D4个I/O端口进行设置。,PORTA=0xCA; DDRA=0x0F;,问题: 如果按图中那样设置,则会自动生成(初始化)语句是什么?,3.代码自动生成 在上述CodeWizardAVR代码生成器对话框中,将各项参数
21、设置完毕后,可以选择File|Generate,Save and Exit菜单项,自动生成源程序文件和工程了。 在生成过程中,文件保存对话框会提示你输入3个将要被保存的文件的文件名,分别为C源程序文件名、工程文件名、代码向导文件名,它们的扩展名对应分别为:*.C、*.prj、*.cwp。,小窍门!,要通过工程得到单片机可以运行的可执行文件,需要经历以下步骤: 一、编译 可以选择Project|Compile菜单命令,或F9键或点击工具栏中的 按钮,编译器会马上对程序进行编译。 二、可执行文件的生成 可以选择Project|Make菜单命令,或ShiftF9键或点击工具栏中的 按钮,生成项目的可
22、执行文件(*.hex)。,1.2.6 项目的编译与生成,用CodeVisionAVR C生成了可执行文件*.hex后,必须将程序写入(固化)在单片机中才能运行。 一、下载工具 典型下载工具是广州双龙公司的“SLISP”。,1.2.7 程序下载与运行,二、程序的下载 选择好PC端下载接口、下载速度、目标芯片型号后,可以点击“Flash存储器”栏的“文件打开”按钮选择欲写入的HEX文件;之后又将弹出如图“空闲存储器填充”对话框: 选择“填充FF”,确定。 最后,在保证PC机的相应端口与目标系统连线完好,且目标系统处于工作状态的前提下,点击“编程”按钮,即可将可执行文件下载(固化)到芯片中。 有关“
23、编程选项”、“配置熔丝”等设置将在后续章节中祥述。,1.2.8 Proteus仿真平台,Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。,一、软件界面,菜单栏,工具栏,预览窗,原理图编辑区,模型选择工具栏,仿真调试,当前元件列表,二、编辑原理图,1.放置元件 2.连线 3.编辑元件属性,仿真程序文件,时钟频率,三、仿真,运行,单步运行,暂停,停止,一、在Proteus中绘制原理图,二、利用CodeVisionAVR C编写程序,#include
24、 bit k; main() DDRC.3=0; PORTC.3=1; DDRD.3=1; /*无限循环检测与输出*/ while(1) k=PINC.3; PORTD.3=k; /将k变量的内容取反后,送给PD3口 ,问题: 1.第一行是什么? 2.main函数中前三句是什么意思? 3.为什么要进行无限循环?,包含单片机对应的头文件,三、下载程序,观察、分析运行结果,四、拓展,1.实现正逻辑的开关控制功能; 2.将开关接到PB6,指示灯接到PA3,实现功能。,五、填写教学检查表,1.3 子任务二 交通灯控制,任务要求: 用LED模拟实现十字路口交通灯控制系统。控制方式: (1)东西方向:红灯
25、65秒,绿灯40秒,黄灯5秒; (2)南北方向:红灯45秒,绿灯60秒,黄灯5秒。,讨论: 子任务一的方法能借鉴吗? 怎么延时? 怎么控制变灯? ,一、Proteus原理图,1.3.1 开关组控制发光管组,共阳极,二、编写程序,#include void main() DDRC=0x00; /定义PC口为输入口 PORTC=0x00; /不使用内部上拉电阻 DDRD=0xff; /定义PD口为输出口 While(1) PORTD=PINC; /无限循环,把输入送到输出 ,问题: 这段程序的关键在哪里?怎么解释?,三、仿真调试,一、Proteus原理图,1.3.2 延时控制发光管,二、延时功能的
26、实现,CodeVisionAVR C中,通过两个函数实现延时功能: 1. void delay_ms(unsigned int n); 2. void delay_us(unsigned int n);,注意: 在程序开始的位置,必须包含: #include ,问题: 谁来说说这段程序的含义?,三、编写程序实现功能,#include #include void main() DDRC.0=1; While(1) PORTC.0=PORTC.0; delay_ms(1000); ,一、在Proteus中绘制原理图,控制逻辑:,二、利用CodeVisionAVR C编写程序,#include #i
27、nclude main() DDRC=0XFF; /定义PC口为输出口 while(1) PORTC=0XEE; /东西方向红灯亮,南北方向绿灯亮 delay_ms(60000); /延时60秒 PORTC=0XDE; /东西方向红灯亮,南北方向黄灯亮 delay_ms(5000); /延时5秒 PORTC=0XF5; /东西方向绿灯亮,南北方向红灯亮 delay_ms(40000); /延时40秒 PORTC=0XF3; ; /东西方向黄灯亮,南北方向红灯亮 delay_ms(5000); /延时5秒 ,三、下载程序,观察、分析运行结果,四、拓展,1.改变延时时间实现功能(比如最长延时90秒
28、); 2.彩灯循环控制。,五、填写教学检查表,1.4 子任务三 LCD参数显示,任务要求: 在单色LCD液晶显示器上显示文字。,讨论: LCD是什么? LCD有哪些种类? 怎么显示? ,一、LCD种类,1.4.1 LCD介绍,按颜色:单色、彩色 按成像模式:字符、点阵 按分辨率:VGA、SVGA、XGA、WXGA、WUXGA,二、字符型LCD的应用,可以有8位和4位两种数据操作模式。 采用4位模式时,只需用到模块的D4D7引脚。,1.4.2 字符型LCD应用,一、Proteus仿真环境下的1602液晶模块,2.CodeVisionAVR C的应用,(1)lcd_init初始化函数,作用: 初始
29、化液晶模块。函数形参是需设定的最大显示列数。,(2)lcd_clear清屏函数,作用:清除液晶屏显示。,(3)lcd_gotoxy光标定位函数,作用:将光标定位到形参(x,y)指定的位置。 调用lcd_init或lcd_clear函数后,默认光标位置为(0,0)。,(4)lcd_putchar显示字符函数,作用:在当前光标定位显示形参指定的字符(ASCII)。,调用此函数后,光标自动向后移动一个字符位置。,(5)lcd_puts字符串显示函数,作用:在当前光标定位显示形参指定的字符串(RAM)。 调用此函数后,光标自动向后移动字符串长度个位置。,(6)lcd_putsf字符串显示函数,作用:在
30、当前光标定位显示形参指定的字符串(flash)。 调用此函数后,光标自动向后移动字符串长度个位置。,此两函数区别: 1.实参存储位置不同; 2.常量作实参时,只能用lcd_putsf。,一、在Proteus中绘制原理图,二、利用CodeVisionAVR C编写程序,#include #include /定义变量_lcd_port 为PC口,因PORTC的口地址是0X15 #asm .equ _lcd_port=0x15 #endasm char *sss=” AVR”; /定义RAM中的字符串变量 char flash *aaa=” 16”; /定义flash中的字符串变量 void mai
31、n(void) lcd_init(16); /初始化LCD为16列2行 lcd_gotoxy(2,0); /定位在0行2列 lcd_putsf(“Hello ”); /显示字符串 lcd_puts(sss); /显示RAM中的字符串变量 lcd_putsf(aaa); /显示flash中的字符串变量 while (1); ,一、在Proteus中绘制原理图,二、利用CodeVisionAVR C编写程序,#include #include /定义LCD连接到PC口 /LCD可连到任何一个口,PA口为0X1B,PB口为0X18,PC口为0X15,PD口为0X12 #asm .equ _lcd_p
32、ort=0x15 #endasm void XianShi_uint (unsigned int shu) char j,lcd5; /申请一个有6个元素的字符型数组和两个字符型循环变量 lcd0=shu/10000+0x30; /将数的万位转变为ASCII码存放在lcd0 lcd1=shu/1000%10+0x30; /将数的千位转变为ASCII码存放在lcd1 lcd2=shu/100%10+0x30; /将数的百位转变为ASCII码存放在lcd2 lcd3=shu/10%10+0x30; /将数的十位转变为ASCII码存放在lcd3 lcd4=shu%10+0x30; /将数的个位转变为
33、ASCII码存放在lcd4 for(j=0;j5;j+) /从第一个数开始送显示 lcd_putchar(lcdj); main() lcd_init(16); xianshi_uint(123); while(1); ,由向导生成,三、下载程序,观察、分析运行结果,四、拓展,1.改变成PD端口驱动显示LCD; 2.编写一个通用的,在LCD上显示数据的函数。,五、填写教学检查表,1.5 子任务四 参数设置技术,任务要求: 通过键盘输入某个参数,并将其保存在单片机的EEPROM中。,讨论: “键盘”是什么? 怎么读取按键值? 怎么存储EEPROM? ,一、单键处理,1.5.1 按键处理,抖动时间
34、一般为510毫秒。如果每间隔20毫秒检测一次按键的状态,即可消除抖动影响。,char j; DDRD=0xFF; /定义PD口为输出口 DDRB=2; /00000010 PORTB=1; /00000001 j=PINB; /j存放PB口上次的值 while(1) if( (PINB.0=0) /延时20毫秒 ,在Proteus仿真环境和实验装置上实现。,问题: 这是对按键动作的哪一个阶段进行判断?,二、矩阵键盘,行,列,此时如果无键按下,PINB将为0xF0,逐列进行判断: if(PINB.4=0) else if(PINB.5=0) else if(PINB.6=0) else if(P
35、INB.7=0),PORTB=0xFD;,DDRB=0x0F; PORTB=0xF0;,PORTB=0xFE;,再进行逐列判断: if(PINB.4=0) else if(PINB.5=0) else if(PINB.6=0) else if(PINB.7=0),unsigned char JianZhi() unsigned char k; DDRB = 0x0F; /设置PB口低4位为输出,高4位为输入 PORTB = 0xF0; /PB口高4位接内部上拉电阻,低4位输出0 delay_us(10); /等待接口变化稳定 if(PINB=0xF0) return 0xFF; /如果高4位输
36、入为全高,表示无键按下,返回0xFF for(k=0;k4;k+) PORTB= (1k); /将1左移k位后取反,使PB口的K行输出0 delay_us(10); if(PINB.4=0) return(k*4+0); /检查k行0列的键 else if(PINB.5=0) return(k*4+1); /检查k行1列的键 else if(PINB.6=0) return(k*4+2); /检查k行2列的键 else if(PINB.7=0) return(k*4+3); /检查k行3列的键 ,#define uchar unsigned char #define uint unsigned
37、 int,一、无符号整型参数设置,1.5.2 参数设置,int x=0;,按数字键:x=x*10+键值,按退格键:x=x/10,按确定键:返回x的值,int SheZhi(uint z) uchar j,jian; / j作循环控制变量,jian存放上次键值 uint x; /x用来存放修改参数的绝对值,y用来存放修改的参数 lcd_clear(); XianShi_uint(z); delay_ms(1000); x=0; j=1; jian=0xff; /假定检查键之前,无键按下 while(j) /j=1时循环,j=0时退出循环 delay_ms(20); /去键抖动 if(jian=0
38、xff) /数字键处理,else if(JianZhi()=12) x=x/10; /删除键处理 else if(JianZhi()=14)j=0;/直接退出键处理,返回z变量 else if(JianZhi()=15)j=0;z=x;/确定键处理,将修改值y返回 jian=JianZhi();/保存当前的键值,以便下次比较 lcd_clear(); /清除屏幕显示 Lcd_uint(x);/显示修改过的参数 /设置结束 return z; ,一、在Proteus中绘制原理图,二、利用CodeVisionAVR C编写程序,三、下载程序,观察、分析运行结果,eeprom uint dong=1
39、0, nan=12;,四、填写教学检查表,1.6 子任务五 LED数码管显示技术,任务要求: 通过7219控制七段数码管显示东、南方向的时间。,讨论: 7219是什么? 什么是7段数码管? 怎么显示? ,字型表,P37页。,a,b,c,d,e,f,g,dp,共阴极,数据端,公共端,0,1,0,0,1,1,1,1,思考:共阳极呢?,1.6.1 认识七段数码管,4位数码管,#include #include void main(void) DDRD=0XFF; DDRC=0XFF; while (1) PORTD=0Xff;/关显示 PORTC=0Xff; /送8.的字型码 PORTD=0XfE;
40、/第一位显示 delay_ms(1); PORTD=0Xff;/关显示 PORTC=0X06; /送1的字型码 PORTD=0Xfd; /第二位显示 delay_ms(1); PORTD=0Xff; /关显示 PORTC=0X5B; /送2的字型码 PORTD=0Xfb; /第三位显示 delay_ms(1); PORTD=0Xff; /关显示 PORTC=0X4f; /送3的字型码 PORTD=0Xf7; /第四位显示 delay_ms(1); ,在Proteus仿真环境和实验装置上实现。,拓展: 1.加长间隔延时会怎样? 2.显示12.34。,弊端: 1.软件动态扫描; 2.浪费资源。,1
41、.6.2 认识MAX7219,MAX7219,教材:P39页。,特点: 1.硬件动态扫描; 2.可控制8位数码管; 3.SPI(Serial Peripheral Interface-串行外设接口)通讯接口。,MAX7219的SPI控制协议:,(1)位显示命令(命令字:0x010x08) 如:,(2)译码方式命令(命令字:0x09) 如:,小数点不参与译码。,结合命令字0x010x08: 1.当命令值的D7位为1时,小数点(DP)点亮; 2.当命令值的D7位为0时,小数点(DP)不亮。,如:,(3)亮度调节命令(命令字:0x0A) 如:,命令值的取值范围为:0x000x0F。0最暗,0x0F最
42、亮。,(4)动态扫描位数命令(命令字:0x0B) 如:,命令值的取值范围为:0x000x07,对应设定18位。,(5)停机/工作命令(命令字:0x0C),命令值的D0位为0表示MAX7219停机,D0=1时表示正常工作。,如:,(6)显示测试命令(命令字:0x0F),命令值的D0位为0表示按设定模式正常工作,D0=1时MAX7219将按最大亮度接通显示。,1.6.3 单片机的SPI应用,一、SPI通讯原理,01011101 00111101,SPI Bus Master Input/Slave Output SPI总线主机输入/ 从机输出,ATmega16中: MISO - PB6 MOSI
43、- PB5 SCK - PB7 - PB4,Max7219中: MISO - DIN MOSI SCK - CLK - LOAD,二、ATmega16与Max7219的SPI通讯应用,三、ATmega16中的SPI控制寄存器,SPE,DORD,MSTR,CPOL,CPHA,SPR1,SPR0,SPIE,SPCR,SPIE:SPI中断使能,1、SPCRSPI控制寄存器,SPE:SPI功能使能,DORD:数据次序 1:低位优先 0:高位优先,MSTR:主/从选择 1:主SPI 0:从SPI,CPOL:同步信号(SCK)极性,CPHA:数据采样相位(时刻) 1:SCK结束沿采样 0:SCK起始沿采样
44、,SPR1、SPR0:SCK速率选择 P43页,表117 Fosc系统时钟频率。,WCOL,-,-,-,-,-,SPI2X,SPIF,SPSR,SPIF:SPI中断标志 串行发送结束后,SPIF 将被置位(1)。,2、SPSRSPI状态寄存器,WCOL:写冲突标志位,SPI2X:SPI倍率,LSB,MSB,3、SPDRSPI数据寄存器,SPI通讯的数据将从SPDR中读/写。,SPDR,四、自定义控制函数,#define uchar unsigned char void spi_xie(uchar i,uchar j) /PB.7(SCK)、PB.5(MOSI)、PB.4(/SS)为输出,PB.
45、6(MISO)为输入, DDRB.7=1; DDRB.6=0; DDRB.5=1; DDRB.4=1; SPCR=0x5e; /SPI设置:SPI使能、禁止中断,数据传送高位在前, / 数据传送频率为系统频率的64分频即62.5KHz PORTB.4=0; /load=0,选通7219 SPDR=i; /传送数据i while(SPSR.7=0); /等待SPI发送完 SPDR=j; /传送数据j while(SPSR.7=0); /等待SPI发送完 PORTB.4=1; /load=1, 数据锁存于7219、结束对7219的传送 ,1、SPI写数据函数,void spi_7219c() sp
46、i_xie(0x0B, 0x07); /显示8位 spi_xie(0x0A, 0x09); /亮度调节 spi_xie(0x09, 0xFF); /每位BCD输入 spi_xie(0x0C, 0x01); /工作状态 spi_xie(0x0F, 0x00); /非测试 ,2、Max7219初始化函数,一、在Proteus中绘制原理图,教材P41页,图1-29。,二、利用CodeVisionAVR C编写程序,void xianshi_2uchar(uchar m,uchar n) spi_xie(1,0x0f); /关闭此位 spi_xie(2,m/100); /显示m百位上的数字 spi_x
47、ie(3,m/10%10); /显示m十位上的数字 spi_xie(4,m%10); /显示m个位上的数字 spi_xie(5,0x0f); /关闭此位 spi_xie(6,n/100); /显示n百位上的数字 spi_xie(7,n/10%10); /显示n十位上的数字 spi_xie(8,n%10) /显示n个位上的数字 ,三、下载程序,观察、分析运行结果,一、点阵LED模块,二、汉字字模,点阵的列采用共阴极时,可以在行信号上发送数据。二进制某位为1时,对应二极管点亮,反之不亮。 这样,若干列各自的显示数据构成一个汉字的“字模”。,上图“甲”字的字模为: 0x00、0x00、0x00、0xF8、0xA8、0xFF、0xA8和0xF8。,三、利用CodeVisionAVR C编写程序,四、下载程序,观察、分析运行结果,以小组为单位,讨论理解并优化程序。,五、填写教学检查表,1.7 项目设计与实现,以
链接地址:https://www.31doc.com/p-2981348.html