IO并行口驱动LED显示.docx
- 文档编号:23361797
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:15
- 大小:339.27KB
IO并行口驱动LED显示.docx
《IO并行口驱动LED显示.docx》由会员分享,可在线阅读,更多相关《IO并行口驱动LED显示.docx(15页珍藏版)》请在冰豆网上搜索。
IO并行口驱动LED显示
目录
一、程序设计要求,及设计思路………………………1
二、程序流程图…………………………………………2
三、proteus电路图………………………………………3
四、C程序解析…………………………………………4
五、hex文件生成……………………………………5
六、hex文件加载………………………………………6
七、项目成果……………………………………………7
八、实验小结……………………………………………8
九、参考文献……………………………………………9
内容
一、程序设计要求
利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。
在数码管上循环显示0-9数字,时间间隔0.2秒。
设计思路
七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。
LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,下面给出共阴极的字形码见表2
“0”
3FH
“8”
7FH
“1”
06H
“9”
6FH
“2”
5BH
“A”
77H
“3”
4FH
“b”
7CH
“4”
66H
“C”
39H
“5”
6DH
“d”
5EH
“6”
7DH
“E”
79H
“7”
07H
“F”
71H
由于显示的数字0-9的字形码没有规律可循,只能采用查表的方式来完成我们所需的要求了。
这样我们按着数字0-9的顺序,把每个数字的笔段代码按顺序排好!
建立的表格如下所示:
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
二、程序流程图
三、proteus电路图
四、C程序解析
#include
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharminute;//内部计数
voiddelay1s(chara)//延时函数,使用空循环实现延时,延时具体时常由a数值决定
{
unsignedchari,j,k;
for(k=a;k>0;k--)
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
voidseter(void)//计数设置函数,设置要求的计时时长
{if(P1_0==0)//P1.0为计时输入单元,P1.0接通
{minute++;//分钟计数,接通一次数值+1
if(minute==60)//60分钟与0分钟的转换
{minute=0;}
while(P1_0==0);//自锁循环函数,确保P1.0接通一次,minute只+数一次
}
if(P1_2==0)//P1.2为计数清除按键,用于计数时间与预想值不同时
{minute=0;}
P2=table[minute/10];//输入的值显示,分钟个位输出
P3=table[minute%10];//输入的值显示,分钟十位输出
}
voidmain(void)//主函数
{while(P1_1==1){//P1.1开始键属于断开时,调用,seter函数,设定需求计时量
seter();//一旦,P1.1闭合一次,函数结束
}
minute--;//minute数值减少1,并输出显示
P2=table[minute/10];
P3=table[minute%10];
while(P1_7==1)//P1.7为分钟计数完成归0指示,断开运行
{for(;P0_2==0;)//读取P0.2秒针进位指示
{minute--;
P2=table[minute/10];
P3=table[minute%10];
delay1s(100);}延时函数,确保,不在同一时间读入两次指示
if(minute==0)//P1.7,完成归0设定
P1_7=0;}
}
#include
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharSecond,times;
unsignedintaa,bb;
bitalARMflag;
voiddelay1s(chara)//延时循环
{
unsignedchari,j,k;
for(k=a;k>0;k--)
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
voidseter(void)//设定函数
{if(P1_4==0)
{times++;
if(times==60)
{times=0;}
while(P1_4==0);
}
if(P1_6==0)
{times=0;}
}
voidmain(void)
{Second=0;//显示初始化
P0=table[Second/10];
P2=table[Second%10];
while(P1_5==1){
seter();
}
Second=60;//计数初始
while(P1_7==1||times!
=0)//运行判断条件,当计数完成时,不再计数
{
delay1s(100);//1秒延时
P3_2=1;//可能多余了
Second--;//秒计数-1
P0=table[Second/10];//秒计数显示,个位
P2=table[Second%10];//秒计数显示,十位
if(Second==0)//秒针循环次数控制
{times--;
Second=60;
P3_2=0;//可能多余了
}
}
if((times==0)&&(P1_7==0))//发出"嘀、嘀"报警声
{
P1_2=1;
delay1s(500);}
}
五、hex文件生成
1)建立一个新工程单击Project菜单,在弹出的下拉菜单中选中NewProject选项
2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51
如下图所示,然后点击保存.
3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keilc51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.
4)完成上一步骤后,屏幕如下图所示
到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。
5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项
新建文件后屏幕如下图所示
此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“SaveAs”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。
注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。
然后,单击“保存”按钮。
6)回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键,弹出如下菜单
然后单击“AddFiletoGroup‘SourceGroup1’”屏幕如下图所示
选中Test.c,然后单击“Add”屏幕好下图所示
注意到“SourceGroup1”文件夹中多了一个子项“Text1.c”了吗?
子项的多少与所增加的源程序的多少相同
在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了吧,即Keilc51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。
程序输入完毕后,如下图所示
8)在上图中,单击“Project”菜单,再在下拉菜单中单击“BuiltTarget”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/Stop
DebugSession”(或者使用快捷键Ctrl+F5)
9)调试程序:
在上图中,单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“StopRunning”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“SerialWindows#1”选项,就可以看到程序运行后的结果
10)单击“Project”菜单,再在下拉菜单中单击
“
”在下图中,单击“Output”中单击“CreateHEXFile”选项,使程序编译后产生HEX代码,供下载器软件使用。
把程序下载到AT89S51单片机中。
六、hex文件加载
双击AT89C51芯片,在progranfile里选中所要添加的文件,并确定
七、项目成果
如下图,P1.0启动计时输入单元
如下图,P1.1开始键
七、项目成果
如下图,P1.0启动计时输入单元
如下图,P1.1开始键
八、实验小结
通过这次的实验,使我们进一步熟悉并行口直接驱动LED显示硬件电路,掌握显示程序设,了解延时程序在显示电路中的运用,并培养了综合编程能力。
在实验中发现,其实影响LED显示速度的因素有很多:
1.程序本身很长的话,运转速度变慢
2.与电脑芯片本身性能的运算速度有关。
3.由于延时程序是靠程序内部空运转来达到效果,因此子程序的嵌套层数就直接影响LED的显示速度
4.与运行速度与阻值有关。
经过多次调整电阻阻值发现,随着阻值越来越大,LED灯显示的速度明显变慢,当达到800欧姆时,变化的速率降低,显示速度最慢;如果电阻数值持续变小,大概20-30欧姆左右,LED灯各段灯管保持常亮。
当然,实现LED显示速度变化主要根据整体阻值的大小,单一阻值通过电流影响并不大。
参考文献
1.例说51单片机(C语言版)(第3版)张义和 等编著
人民邮电出版社2010年06月
2.51单片机原理及应用--基于Keil C与Proteus陈海宴 编著
北京航空航天大学出版社2010年07月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IO 并行口 驱动 LED 显示