数码管及流水灯实验报告
成员:
20##年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
实验二、秒表
2.软件代码:
实验一、秒表
#include //IO定义
#include //延时库文件
const unsigned char led_7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//段码列表,共阳极,0~9的代码列表
const unsigned char position[4]={0xEF,0xDF,0xBF,0x7F};
//位输出代码,分别定义PD5~Pd0单一输出“0”的状态
unsigned char time[3]; //时、分、秒计数
unsigned char dis_buff[4]; //显示缓冲区,存放要显示的6字符的段码
unsigned char time_counter; //1s计数器
unsigned char point_on=0; //秒显示标志
void display(void)
{
unsigned char i;
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; //清除位信号
}
}
void time_to_disbuffer(void)
{
/* unsigned char i,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;
}
void main(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 //延时库文件
const char led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
//段码列表,共阳极,0~F的代码列表
int main(void)
{
char i=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<检测PC3是否按下
{
if(i<16)
{
PORTB=led[i];
i++;
}
if(i>=16)
i=0;
}
}
while(!(PINC&(1<再次放手检测
if((PINC&(1<显示循环开始
{
_delay_ms(10); //点亮时间
if((PINC&(1<检测PC2是否按下
{
if(i<16)
{
PORTB=led[i];
i--;
}
if(i>=16)
i=0;
}
}
while(!(PINC&(1<再次放手检测
}
}
四. 成员分工及完成情况
五. 意见及建议
实验报告、编译工程文件、仿真文件打包提供电子版。
苏州大学实验报告院系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称数码管LED实验一实验目的理解8段数码管的基本原…
实验四数码管动态显示实验一一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段…
单片机实验报告一实验名称数码管动态扫描显示01234567实验五二实验目的1掌握数码管显示数字的原理2通过不同的编程实现灵活运用数…
HUNANUNIVERSITY课程实验报告实验名称学生姓名学生学号专业班级指导老师数码管显示实验20xx1217实验三数码管显示实…
项目名称数码管实验报告姓名陈姣班级11电气2学号11731204指导老师赵海兰实验目的巩固Keil软件的使用方法学习端口输入输出的…
数码管动态显示实验一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段数码管共…
北京邮电大学实验报告实验名称数码管扫描显示控制器设计与实现学院信息与通信工程学院班级姓名数字电路与逻辑设计实验报告学号日期索引一实…
机器人控制课程总结报告机器人控制仿真实验二数码管动态显示姓名李铃年级20xx级系别信息工程学院计科师学号1111000048同组人…
用七段数码管显示简单字符译码器及其应用实验报告专业班级20xx级计算机1班学号1137030姓名赵艺湾实验地点理工楼901实验时间…
摘要单片机自20世纪70年代以来以其极高的性价比以及方便小巧受到人们极大的重视和关注本设计选用msp430f249芯片作为控制芯片…