数码管及按键实验报告模板1.docx
《数码管及按键实验报告模板1.docx》由会员分享,可在线阅读,更多相关《数码管及按键实验报告模板1.docx(13页珍藏版)》请在冰点文库上搜索。
数码管及按键实验报告模板1
数码管及流水灯实验报告
成员:
2012年11月
一、实验要求:
1.实验1:
在开发板上调试利用按键控制数码管从1累加到F变化(S2加、S3减)(不同分组按键利用IO口不同);
2.实验2:
利用开发板进行秒表设计(显示分、秒,分辨率0.1s,如0.58.5)(参考P189程序);
二、硬件原理图
1.硬件原理图
A到F
秒表
2.原理图分析:
实验一原理
LED数码管是由4个发光二极管中的7个长条形发光二极管(俗称7笔段),按a、b、c、d、e、f、g顺序组成“8”字形,另一个点形的发光二极管dp放在右下方,用来显示小数点,。
只要控制7笔段按一定的要求亮与灭,就能显示出十六进制0~F。
实验二原理
以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发光二极管点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,控制信号为高电平时点亮。
电平信号按照dp,g,e…a的顺序组合形成的数据字称为该字符对应的段码
三、软件设计系统
1.软件设计思想与流程图
软件流程图如下(标准流程图画法)……:
实验一、A到F
N
N
Y
Y
实验二、秒表
Y
YN
YN
N
N
N
i<=3Y
Y
Y
2.软件代码:
实验一、秒表
#include//IO定义
#include//延时库文件
constunsignedcharled_7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//段码列表,共阳极,0~9的代码列表
constunsignedcharposition[4]={0xEF,0xDF,0xBF,0x7F};
//位输出代码,分别定义PD5~Pd0单一输出“0”的状态
unsignedchartime[3];//时、分、秒计数
unsignedchardis_buff[4];//显示缓冲区,存放要显示的6字符的段码
unsignedchartime_counter;//1s计数器
unsignedcharpoint_on=0;//秒显示标志
voiddisplay(void)
{
unsignedchari;
for(i=0;i<=3;i++)//显示循环开始
{
PORTB=led_7[dis_buff[i]];//段码写入PORTA
if(point_on&&(i==1||i==3))
PORTB&=0x7F;//小数点显示
PORTD=position[i];//位信号写入PORTD
_delay_ms
(1);//点亮延时
PORTD=0xFF;//清除位信号
}
}
voidtime_to_disbuffer(void)
{
/*unsignedchari,j=0;
for(i=0;i<=2;i++);
{
dis_buff[j++]=time[i]%10;
dis_buff[j++]=time[i]/10;
}*/
dis_buff[0]=time[0]/10;
dis_buff[1]=time[1]%10;
dis_buff[2]=time[1]/10;
dis_buff[3]=time[2]%10;
}
voidmain(void)
{
PORTB=0xFF;//IO初始化
DDRB=0xFF;
PORTD=0xFF;
DDRD=0xFF;
time[2]=11;time[1]=00;time[0]=23;//时间初值
time_to_disbuffer();//将时间值装载至缓冲区
while
(1)//循环开始
{
display();//调用显示函数
if(++time[0]>=99)//次数计数
{
time[0]=0;//重置计数
point_on=~point_on;//小数点位求反
if(++time[1]>=60)//秒数目达到60后进位重置
{
time[1]=0;
if(++time[2]>=60)//分计数达到60后进位重置
{
time[2]=0;
}
}
}
time_to_disbuffer();//时间装载至缓冲区
_delay_ms(5);//延时
}
}
实验二、0到F
#include//IO定义
#include//延时库文件
constcharled[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
//段码列表,共阳极,0~F的代码列表
intmain(void)
{
chari=0;//定义i
PORTB=0xc0;//定义输入端的初始值,0xFF表示高电平
DDRB=0xff;//定义DB口为输入端
PORTD=0xef;//定义输出端的初始值,0x70表示低电平
DDRD=0xff;//定义DD口为输出端
while
(1)
{
if((PINC&(1<{
_delay_ms(10);
if((PINC&(1<{
if(i<16)
{
PORTB=led[i];
i++;
}
if(i>=16)
i=0;
}
}
while(!
(PINC&(1<if((PINC&(1<{
_delay_ms(10);//点亮时间
if((PINC&(1<{
if(i<16)
{
PORTB=led[i];
i--;
}
if(i>=16)
i=0;
}
}
while(!
(PINC&(1<}
}
四.成员分工及完成情况
五.意见及建议
实验报告、编译工程文件、仿真文件打包提供电子版。