单片机矩阵按键做矩阵式led多少频率看不出闪烁现象

孔夫子旧书网该图书已经找不到了, 还有其他店铺销售此图书。Copyright(C)
孔夫子旧书网
京ICP证041501号
海淀分局备案编号您的位置: >
基于80C51单片机的LED动态显示实例
日 10:29 来源:互联网 作者:秩名 (0)
  单片机80c51接线图如图1所示。图1中,4位显示管用共阳极。运用动态显示,采用循环导通或循环截止各位显示器的做法。当循环显示时间间隔较小时,由于人眼的暂留特性,就将看不出数码管的闪烁现象。
图1 单片机80c51接线图
  控制系统设计
  程序框图
图2 程序框图
  程序清单
  程序写入80c51芯片,如下
  #include
  /*---------------------定义变量----------------------------------*/
  sbit p1_0=P1^0;
  sbit p1_1=P1^1;
  sbit p1_2=P1^2;
  sbit p1_3=P1^3;
  sbit p1_4=P1^4;
  sbit p1_7=P1^7;
  //共阳极数码管显示0~9的段码
  unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  unsigned int count=0; //定义计数器
  unsigned int weight=0; //称重变量
  void delay(unsigned int time); //延时
  void display(unsigned int n); //数码管显示
  /*---------------------主程序------------------------------------*/
  void main(void) {
  /*-输入同步显示-*/
  while(1){
  int i=0;
  if((P1&0x1f)==0x1f) ; //没按按键不动作
  else if(p1_0==0) {count=count+100;while(p1_0==0);} //while(P1!=0xff)为等待按键松开
  else if(p1_1==0) {count=count+10; while(p1_1==0);}
  else if(p1_2==0) {count=count+1; while(p1_2==0);}
  else if(p1_3==0) {count=0; while(p1_3==0);}//计算清零
  else if(p1_4==0) //确认开始称量
  p1_7=0;
  if(count&255) count=0; //计数器范围0~255g出后自动清零
  display(a); //调用显示函数
  /*-判断称重是否足够并显示-*/
  while(1){
  weight=P3; //从P3口获取称重数据
  if(weight
  else p1_7=0; //P1.7置低位停止电机
  display(weight*5);
  if(p1_3==0) { while(p1_3==0);} //计算清零,并结束本次称量
  /*-------------------延时子程序------------------------------------*/ void delay(unsigned int time){
  unsigned int j=0;
  for(;time&0;time--)
  for(j=0;j&125;j++);
  /*-------------------数码管显示子函数------------------------------*/
  void display(unsigned int n){
  P2=1; //P2=1选择千位
  P0=table[n/1000]; //千位取整后显示
  delay(10);
  n=n%1000; //千位取余
  P2=2; //P2=2选百位
  P0=table[n/100];
  delay(10);
  n=n%100;
  P2=4; //P2=4选十位
  P0=table[n/10];
  n=n%10;
  delay(10);
  P2=8; //P2=8选个位
  P0=table[n];
  delay(10);
  程序说明
  1、称量范围为0~255g,用户输入超过255则会自动清零。
  2、4位显示管用共阳极。运用动态显示。通过P2口选位,P0口控制显示什么数字,再延时显示短暂的时间,然后重复P2口选下一位。由于人的视觉暂留,感觉4位数字同时显示。
  3、0xc0等表示十六进制的C0H。如&a=0x20&,相当于&a=16&。
  4、本程序由80c51的P0和P2口控制LED数码管的显示,P1.0~P1.5检测按键输入,P3口接收称重数据,P1.7输出高低电平控制电机启动停止,其他口接线为80c51提供运作基础。
相关技术文章:
相关资料下载:
技术交流、我要发言
发表评论,获取积分! 请遵守相关规定!提 交
80C51芯片业界动态
80C51芯片技术应用
单片机技术应用
单片机资料下载扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
我想做个16*16的LED点阵,用51单片机控制,请问是否要外加电压电源已达到亮度,是不是还要加上拉电阻.我还想问下,怎么才能排除在组成的图形中的“鬼影”,就是排除闪烁的暗灯.最好有设计例子.本人最近做了个模拟实验,用51单片机控制8*8led,用P2端的高电平控制行,用P1端的低电平控制列,并且用了锁存器控制行,但就是在做实验时倒数第2行和倒数第3行,不亮.程序如下:#include#include#define unchar unsigned char#define unint unsigned intunchar code tab[]={0xf3,0xf1,0xf3,0xf3,0xf3,0xf3,0xe1,0xe1};//为“1”字模图形unchar code tab1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//行扫描的数组unint j,k,i;sbit kong=P3^6;//锁存器的控制unchar *p;void delay(unchar t){while(t--);}void main(){kong=0;while(1){ for(j=0;j
扫二维码下载作业帮
2亿+学生的选择
单片机采用MSC-51或其兼容系列芯片,采用24MHZ或更高频率晶振,以获得较高的刷新频率,时期显示更稳定.单片机的串口与列驱动器相连,用来显示数据.P1口低4位与行驱动器相连,送出行选信号;P1.5~P1.7口则用来发送控制信号.P0口和P2口空着,在有必要的时候可以扩展系统的ROM和RAM.2列驱动电路列驱动电路有集成电路74HC595构成.它具有一个8位串入并出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行列数据的同时,传送下一行的列数据,既达到重叠处理的目的.74HC595的外形及内部结构如图3所示.它的输入侧有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器.引脚SI是串行数据的输入端.引脚SCK是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打入最低位.移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端.RCK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入输出锁存器.引脚G是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则为高组态.SCLR信号是移位寄存器清零输入端,当其为低时移位寄存器的输出全部为零.由于SCK和RCK两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰.芯片的输出端为QA~QH,最高位QH可作为多片74HC595级联应用时,向上一级的级联输出.但因为QH受输出锁存器的打入控制,所以还从输出锁存器前引出QH,作为与移位寄存器完全同步的级联输出.
74HC595外形及引脚4.1.3行驱动器单片机P1口低4位输出的行号经4/16线译码器74LS154译码后生成16条行选通信号线,再经过驱动器驱动对应的行线.一条行线上要带动16列的LED进行显示,按每一LED器件20MA电流计算,16个LED同时发光时,需要320MA电流,选通三极管8550作为驱动管可满足要求.4.2.系统程序的设计显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示.根据软件分层次设计的原理,可以把显示屏的软件系统分为两层;第一层是底层的显示驱动程序,第二层是上层的系统应用程序.显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其他控制信号,配合完成LED显示屏的扫描显示工作.显示驱动器程序由定时器T0中断程序实现.系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现.从有利于实现较复杂的算法(显示效果处理)和有利于程序结构化考虑,显示屏程序适宜采用C语言编写.4.2.1显示驱动程序显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:
刷频率(帧频)=1/16×T0溢出率
=1/16×f/12(65536-t)
其中f位晶振频率,t为定时器T0初值(工作在16位定时器模式).然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器.为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示.图4为显示驱动程序(显示屏扫描函数)流程图.
4.2.2系统主程序本文设计的系统软件能使系统在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰.图形或文字显示有静止、移入移出等显示方式.系统主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口;然后以“卷帘出”效果显示图形,停留约3s;接着向上滚动显示“我爱单片机”这5个汉字及一个图形,然后以“卷帘入”效果隐去图形.由于单片机没有停机指令,所以可以设置系统程序不断的循环执行上述显示效果.单元显示屏可以接收来自控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示板可扩展至更多的显示单元,用于显示更多的显示内容.5性能分析与总结5.1
性能分析LED显示屏硬件电路只要硬件质量可靠,引脚焊接正确,一般无需调试即可 正常工作.软件部分需要调试的主要有显示屏刷新频率及显示效果两部分.显示屏刷新率由定时器T0的溢出率和单片机的晶振频率决定,表5.1给出了实验调试时采用的频率及其对应的定时器T0初值.
表5.1 显示平刷新率与T0初值关系表(24MHz晶振)刷新率 25 50 62.5 75 85 100 120T0初值 0Xec78 0Xf63C 0Xf830 0xF97E 0XFA42 0XFB1E 0xFBEE从理论上来说,24Hz以上的刷新频率就能看到稳定的连续的显示,刷新率越高,显示越稳定,同时刷新频率越高,显示驱动程序占用的CPU时间越多.试验证明,在目测条件下刷新频率40Hz一下的画面看起来闪烁较严重,刷新频率50Hz以上的已基本察觉不出画面的闪烁,刷新频率达到85Hz以上时再增加画面闪烁没有明显的改善.显示效果处理程序的内容及方法非常广泛,其调试过程在此不作具体讨论,读者可以照源程序自行分析.这个方案设计的16x16的点阵LED图文显示屏,电路简单,成本较低,且较容易扩展成更大的显示屏;显示屏各点亮度均匀、充足;显示图形或文字稳定、清晰无串扰;可用静止、移入移出等多种显示方式显示图形或文字.5.2
总结本文设计的一个室内用16x16的点阵LED图文显示屏,能够在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰.图形或文字显示有静止、移入移出等显示方式.本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点.
总结本文的研究工作,主要做了下面几点较突出的工作:
一、通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标.二,本文设计的LED显示屏能够实现在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰.图形或文字显示有静止、移入移出等显示方式.三,文章给出了系统具体的硬件设计方案,硬件结构电路图,软件流程图和具体汇编语言程序设计与调试等方面.四,在这次毕业设计的过程中学会了 Protel 99se 的基本使用,感到Protel 99se 对自动化专业的同学来说是一门很有用的课程.五,通过这次毕业设计,重新复习并进一步学习了MCS-51;熟练掌握了WORD软件的使用.六,存在缺陷:没有考虑抗干扰的问题.
为您推荐:
其他类似问题
扫描下载二维码您的访问出错了(404错误)
很抱歉,您要访问的页面不存在。
1、请检查您输入的地址是否正确。
进行查找。
3、感谢您使用本站,3秒后自动跳转至网站首页

我要回帖

更多关于 单片机矩阵键盘原理 的文章

 

随机推荐