数码管动态显示创新实践.docx
《数码管动态显示创新实践.docx》由会员分享,可在线阅读,更多相关《数码管动态显示创新实践.docx(9页珍藏版)》请在冰豆网上搜索。
数码管动态显示创新实践
成绩评定表
学生姓名
班级学号
专业
电子信息工程
课程设计题目
数码管动态显示
评
语
组长签字:
成绩
日期
年月日
课程设计任务书
学院
信息科学与工程
专业
电子信息工程
学生姓名
班级学号
课程设计题目
数码管动态显示
课程设计目的与要求:
数码管动态显示:
为单片机89S52扩展动态显示数码管,并编写程序完成显示。
工作计划与进度安排:
2016年11月14日选题目查阅资料
2016年11月15日查阅资料
2016年11月16日上机调试
2017年01月01日撰写课程设计报告、答辩
指导教师:
年月日
专业负责人:
年月日
学院教学副院长:
年月日
创新实践
1创新实践的目的
进一步推动高等教育教学改革,促进人才培养模式和教学方法的创新,鼓励和支持大学生尽早参与科学研究、技术开发和社会实践等创新活动,不断激发学生学习的主动性、积极性和创造性,提高大学生的科学素质和文化素养,培养大学生的创新精神、创业精神和实践能力。
2创新实践的题目
数码管动态显示:
为单片机89S52扩展动态显示数码管,并编写程序完成显示。
3原理描述
动态显示,也称为扫描显示。
显示器由6个共阴极LED数码管构成。
单片机的P0口输出显示段码,由一片89S52输出给LED管;由P1口输出位码,经89S52输出给LED显示。
LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段时间点亮一次,利用人眼的“视觉暂留"效应,采用循环扫描的方式,分时轮流选通各数码管的公共端,使数码管轮流导通显示。
当扫描速度达到一定程度时,人眼就分辨不出来了。
尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,认为各数码管是同时发光的。
若数码管的位数不大于8位时,只需两个8位I/O口。
4实验步骤
1.添加原件
打开Proteus ISIS编辑环境,按原理图所列的元件清单添加元件。
2.原理图
3.程序
#include
#include
#defineunitunsignedint
#defineucharunsignedchar
uchardatatimer_count,cm,cf,cs,f;/*定时器计数变量*/
ucharcodeduma[]={0x28,0xF9,0x4C,0x58,0x99,0x1A,0x0A,0xF8,0x08,0x18};
//共阴的数码管段选.将值送给P0口
ucharcodewema[]={0xEF,0xDF,0xBF,0x7F};//P1口的片选位
unsignedcharled_buf[]={0,0,0,0};
delay(uchartime)//time=1时延时10ms
{uchari,j,k,q;
for(q=time;q>0;q--)//10*timems
for(i=10;i>0;i--)//10ms
{for(j=2;j>0;j--)//1ms
{for(k=60;k>0;k--);}//154*3.255=500us
}
}
voiddisplay(void)
{
unsignedchari=0;
led_buf[0]=cf%10;
led_buf[1]=cf/10;
led_buf[2]=cs%10;
led_buf[3]=cs/10;
for(i=0;i<4;i++)
{
switch(i){
case0:
P2=0x7F;break;
case1:
P2=0xBF;break;
case2:
P2=0xDF;break;
case3:
P2=0xEF;break;
default:
P2=0xEF;break;
}
//P0=duma[led_buf[i]];
if(i==2)
{
if(f==1)
{P0=duma[led_buf[i]]|0x08;
//led_buf[2]=led_buf[2]|0x08;
}
else
{P0=duma[led_buf[i]]&0xf7;
//led_buf[2]=led_buf[2]&0xf7;
}
}
else
{
P0=duma[led_buf[i]];
}
//if(i==2)P0&=0xF7;
delay
(1);
}
}
voidmain(void)
{
timer_count=0;//初始化端口
cm=0;
cf=0;
cs=0;
EA=1;ET0=1;
TMOD=0x01;/*T0方式1计时*/
TH0=-46080/256;//定时器T0的高四位赋值
TL0=-46080%256;
TR0=1;/*开中断,启动定时器*/
f=0;
for(;;)
{
display();
}
}
/*定时计数器0的中断服务子程序*/
voidtimer0(void)interrupt1using1
{
TH0=-46080/256;
TL0=-46080%256;
timer_count=timer_count+1;
if(timer_count==10)
{
if(f==0)
{
f=1;
}
else
{
f=0;
}
}
if(timer_count==20)
{
cm=cm+1;
if(f==0)
{
f=1;
}
else
{
f=0;
}
//P1|=0x08;//
delay
(2);
timer_count=0;
if(cm==60)
{
cf=cf+1;
cm=0;
if(cf==60)
{
cs=cs+1;
cf=0;
}
if(cs==24)
{
cs=0;
}
}
}
}
4.运行结果
5心得体会
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好。
通过这次课程设计之后,一定把以前所学过的知识重新温故。
6参考文献
[1] 刘爱娟,王青.51单片机和MAX7219的接口及编程应用[J].电子制作
[2] 张毅刚,彭喜元,单片机原理及应用(第二版)[M].北京:
高等教育出版社
[3] 张迎辉,贡雪梅.《单片机实训教程》[M].北京:
北京大学出版社
[4] 李朝清.《单片机原理及口技术》.北京航空航天大学出版社
[5] 高卫东.《51单片机原理与实践》. 北京航空航天大学出版社
[6] 江志红.《51单片机技术与应用系统开发》.青华大学出版社