北科大单片机实验报告 - 图文(8)

2020-04-18 02:45

只要对应的一段给予高电平点亮,即可自己组合出各种符号。

如给:0b00110001显示P,0b1100011显示L,0b10010001显示H,00011001显示q等

2、修改程序,控制一个8段数码管循环显示0~F 16个字符,每个字符显示1s,并在显示的1s内,数码管的小数点要亮0.5s,灭0.5s。

flash unsigned char

led_7[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; void display(void) { char i;

for(i=0;i<=15;i++) { PORTA = led_7[i]; PORTA |= 0x80; PORTC = position[1]; delay_ms(500); PORTA |= 0x00;

delay_ms(500);

PORTC = 0xff; } }

七、遇到的问题及解决方法

进行实验内容2时,只有5个数码管显示,但是我每个数码管都是接了线的。 经过仔细检查,我发现我是从mega16最下面的接口开始接的,于是错开了一位,第六根线接到另外的接口上了,于是便只显示五位。重新校对接线,问题便解决了。

八、心得体会

通过本次试验,我设计实现单个数码管字符显示,控制一个数码管循环显示“0”-“F”16个字符功能的电路。同时了设计一个综合实验——秒表系统。为了方便的再程序中使用显示的数码管的数值,我们制作了一个显示表,以方便之后的使用。

flash unsigned char

led_7[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};关键字flash表示将数据存放到Flash中,LED_7数组中

27

的量都是固定值,将它们存放到Flash中不会占用有限的Ram资源。

本次实验,我学习到八段数码管的显示方法,并根据字型段码对照表,成功编写代码,实现实验要求。

28

新建项目

四、实验步骤

二、实验内容

一、实验目的

实验五 按键实验

读取键值的函数: #define NO_KEY 0 #define KEY1 1 #define KEY2 2

#define KEY1_PIN ~PIND.2 #define KEY2_PIN ~PIND.3

三、实验所用仪表及设备

硬件连接图如图5.3所示。

硬件:PC机一台、AVR_StudyV1.1实验板

(1)掌握ATMega16的I/O输出特性和使用。

(2)了解按键的使用,及按键消抖的原理与实现。

软件:CodeVision AVR集成开发软件、SLISP下载软件

数码管显示的数值加1;每按一次按键KEY2,数码管显示的数值减1。

(1)单个按键实验,按键控制数码管显示0 — 9,每按一次按键KEY1,

图5.3

29

unsigned char readkey(void) {

if(KEY1_PIN) //判断KEY1是否按下 {

delay_ms(20); //延时20ms,屏蔽抖动区 if(KEY1_PIN) //再次判断KEY1是否按下 {

while(KEY1_PIN); //等待按键释放 return KEY1; //返回键值1 } }

else if(KEY2_PIN) //判断KEY2是否按下 {

delay_ms(20); //延时20ms,屏蔽抖动区 if(KEY2_PIN) //再次判断KEY2是否按下 {

while(KEY2_PIN); //等待按键释放 return KEY2; //返回键值2 } }

return NO_KEY; //没有按键按下,返回键值0 }

说明:PIND.2就表示PIND的第二位,在头文件mega16.h中已给我们定义好,我们可以很方便地操作8位寄存器的每一位。如PORTA.7 = 1;//将PORTA的第7位置1,不影响其它位。它相当于PORTA |= (1 <<7);

五、实验现象

实验内容1:

按K1键时,数码管示数加一,按K2键时示数减一,但是按键时如果不小心,示数的增量就不是1,我按K1的时候故意抖动了一下,示数加2,由1变为3

思考题:K1控制秒表的启动和停止,并进行了消抖处理

30

六、思考题

停止。(硬件连接如图5.4所示)

图5.4

#define NO_KEY 0 #define KEY1 1 #define KEY2 2

#define KEY1_PIN ~PIND.2 #define KEY2_PIN ~PIND.3 char KEY

void char readkey(void) {

if(KEY1_PIN) //判断KEY1是否按下 {

delay_ms(20); //延时20ms,屏蔽抖动区 if(KEY1_PIN) //再次判断KEY1是否按下 {

while(KEY1_PIN); //等待按键释放

KEY = !KEY; //标志位取反

(1)修改实验四的秒表系统,增加一个按键,实现按键控制秒表的启动和

31


北科大单片机实验报告 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:防火墙试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: