16 16LED点阵显示屏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
/***********设置时间*********/
void changetime()
{
if(k1==0)
delayms(100);
if(k1==0)
{beep();
set=1;
change=!change;}
if(set==1&&change==1&&k2==0)
{beep();
if(++hour==24)hour=0;}
成绩评定·
一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。
二、评分
评分项目
设计报告评分
答辩评分
平时表现评分
合 计ຫໍສະໝຸດ Baidu
(100分)
任务完成
情 况
(20分)
课程设计
报告质量
(40分)
表达情况
(10分)
回答问题
情 况
(10分)
工作态度与纪律
(10分)
独立工作
能力
(10分)
得分
课程设计成绩评定
图七
4、按键及蜂鸣器
一共有设有五个按键:模式、设定、增加、减少、确定,分别对应的端口为P3.3、P3.5、P3.1、P3.2、P3.4。
蜂鸣器用三极管作为驱动,控制端口为P3.6.
电路如图八所示:
图八
5、电源
因电路所需电流较大,同时考虑到单片机的工作电压,本系统选用4节5号电池作为电源供电。
五、整体电路图
四、各部分电路设计
1、控制模块:以STC52单片机为控制核心,加上晶振振荡电路和复位电路组成的最小系统,如图四所示:
图四
2、LED点阵模块
采用四个8*8的LED单色高亮红光点阵模块组成16*16的点阵屏,单点电气属性:VOL:1.8-2.6V,AMP:5-15MA。扫描方式为动态扫描。
图五
电路图如图六所示:
TH0=0xd8;//重新赋值
TL0=0xf0;
count++;
switch (count)
{
//case 0:
//case 20:
//case 40:
//case 60:
//case 80:
case 50:LED=!LED; //半秒LED闪烁
break;
default:break;
}
if (count==100)
else{disbuf[1][i+3]=shuzi[minute/10][i];
disbuf[1][i+10]=shuzi[minute%10][i];}
}
if(LED){disbuf[0][14]=disbuf[0][15]=0x6c;}
else {disbuf[0][14]=disbuf[0][15]=0x00;}
三、系统总体设计框图
图一
图二主程序流程图
图三定时器流程图
本次设计是基于STC52单片机,用16*16点阵屏作为显示器显示时间,并附带闹钟,滚动字幕显示功能的多功能时钟,具有很强的实用性和装饰性,新颖时尚。本系统采用STC52单片机为系统的控制核心,系统主要包括控制模块,LED点阵模块,驱动模块,报警模块。
{
count=0;
second++;//秒加1
if(second==60)
{
second=0;
minute++; //分加1
if(minute==60)
{
minute=0;
hour++; //时加1
if(hour==24)
hour=0;

七、设计总结
1、设计过程中遇到的问题及解决方法
由于初次进行单片机电路设计,对单片机及相关的硬件设备不够了解,造成连接电路时发生引脚接错现象。通过仔细了解相关的知识要点和与同学交流解决了该问题。在焊接电路板时碰到的不小心短路情况,也因多次练习终于成功。
2、设计体会
我通过完成这次的单片机课程设计,让我对单片机的理论有了深入的了解,更好的了解单片机这门课程对我的设计有着至关重要的作用。同时在具体的制作设计过程中我发现理论知识与实际的应用存在着不小的差距。在完成这篇论文后,我学会了很多知识,特别是对单片机课程产生了浓厚的兴趣。
3、对设计的建议
通过本次课程设计,我发现我们在学习课本知识的时候,更应该时常动手做实验,巩固和运用学过的知识,理论结合实际地学习。
单片机课程设计
课题:16*16点阵LED电子显示屏
系别:
专业:
姓名:
学号:
XXXXXX学院
2010年12月30日
一、设计目的
1、学习和熟悉单片机的系统开发及应用。
2、了解并熟悉点阵屏的接口连接及软件控制。
二、设计要求
1、设计一个16*16点阵LED电子显示屏。
2、要求在目测条件下LED电子显示屏各点亮度均匀、充足,显示图形和文字应稳定、清晰无串扰。图形文字显示有静止、移入移出等显示方式。
sbit k1=P3^5;
sbit k2=P3^0;
sbit k3=P3^1;
sbit k4=P3^4;
sbit kr=P3^2;
sbit spk=P3^6;
uchar disbuf[2][16];
uchar LED;
uchar hour=12,minute=00,second;
uchar set=0;
void delay(void)
{
unsigned char i;
for(i=0;i<light;i++);
}
/*****可变延时*****/
void delayms(uint x)
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
/*****蜂鸣器*****/
void beep()
八、参考文献
[1]梅丽凤,单片机原理及接口技术,清华大学出版社,2004
[2]扬恢先,黄辉,单片机原理及应用,人民邮电出版社,2006
[3]张毅刚,单片机原理及应用,高等教育出版社,2003
[4]张连华,单片机应用系统设计方法,科学之友, 2010,
[5] 楼然苗,51 系列单片机设计实例,北京航空航天出版社,
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define hang1 P1 //上行线
#define hang2 P0 //下行线
#define lie P2 //列线
#define light 200 //显示亮度
if(set==1&&change==0)
{disbuf[0][i]=disbuf[0][i+7]=0;}
else{disbuf[0][i]=shuzi[hour/10][i];
disbuf[0][i+7]=shuzi[hour%10][i];}
if(set==1&&change==1)
{disbuf[1][i+3]=disbuf[1][i+10]=0;}
{
uchar i,j=70;
for(i=0;i<200;i++)
{
while(--j);spk=~spk;
}
delayms(300);spk=0;
}
/*****装载显示数据至缓冲区*****/
void load_time(void)
{
unsigned char i;
for(i=0;i<6;i++)
{
TL0=0xf0;
IE=0x82;
TR0=1;
while(1)
{
load_time();
display();
changetime();
}
}
/************定时中断0(计时)***************/
void time0(void) interrupt 1 using 1
{
static unsigned char count;//定义内部静态变量
0x06,0x4F,0x69,0x39,0x1F,0x0E,//9
};
uchar code seg[]=
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
};
/*****可变延时*****/
0x38,0x3C,0x22,0x7F,0x7F,0x20,//4
0x27,0x67,0x45,0x45,0x7D,0x39,//5
0x38,0x7C,0x4E,0x4B,0x79,0x30,//6
0x01,0x01,0x79,0x7D,0x07,0x03,//7
0x36,0x7F,0x49,0x49,0x7F,0x36,//8
仿真图如下:
六、程序设计
/*********************************************************
程序名称:LED16*16点阵显示时间
简要说明:P1口接上行线,P0口接下行线,P2口接扫描线
*********************************************************/
图六
3、驱动模块
行线驱动:采用两个74LS573锁存器分别连接点阵块的行线,作为点阵块的电流驱动,控制端口为P0和P1。
列线驱动:采用两各74LS138三线八线译码器组合成四线十六线译码器作为点阵屏的列选控制,接点阵屏的列线,ABCD分别对应的控制端口为P2.0、P2.1、P2.2、P2.3。
电路如图七所示:
if(set==1&&change==1&&k3==0)
{beep();
if(--hour==0xff)hour=23;}
if(set==1&&change==0&&k2==0)
{beep();
if(++minute==60)minute=0;};
if(set==1&&change==0&&k3==0)
}
/*****扫描显示数据缓冲区的内容*****/
void display(void)
{
unsigned char i;
for (i=0;i<16;i++)
{
lie=seg[i];
hang1=disbuf[0][i];
hang2=disbuf[1][i];
delay();
hang1=0x00;
hang2=0x00;
uchar change=0;
uchar code shuzi[][6]=
{
0x3E,0x7F,0x49,0x45,0x7F,0x3E,//0
0x00,0x42,0x7F,0x7F,0x40,0x00,//1
0x46,0x63,0x71,0x59,0x4F,0x46,//2
0x22,0x63,0x49,0x49,0x7F,0x36,//3
{beep();
if(--minute==0xff)minute=59;}
if(set==1&&k4==0)set=0;
}
/*****主程序*****/
void main (void)
{
TMOD=0x01;//定时器0 10ms in 12M crystal用于计时
//定时器1 //中断显示汉字
TH0=0xd8;
相关文档
最新文档