用单片机控制两个数码管显示同时控制流水灯?

89c51单片机用词语言编写题目要求是显示两种模式第一种当按键没按下时数码管显示01流水灯花样一当按键按下时数码管显示02流水灯花样2#include<reg52.... 89c51单片机 用词语言编写 题目要求是显示两种模式第一种 当按键没按下时数码管显示01 流水灯花样一 当按键按下时数码管显示02 流水灯花样2#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;uchar code aaa[]={0xf0,0x0f,0xff};uchar code bbb[]={0xff,0x3c,0x00,0xc3};uchar code table[]={0x3f,0x06,0x5b};sbit BY1=P3^4;       //定义按键的输入端S2键uint a,b,c,d;uchar r=1;void delay(uint z){ uint x,y;    for(x=z;x>0;x--)      for(y=100;y>0;y--);}key()           //按键判断程序{ if(BY1==0)  //判断是否按下键盘 {   delay(10); //延时,软件去干扰   if(BY1==0)   //确认按键按下    {       r=2;            }  }} dis8()  //数码管显示程序(第c个数码管显示r){   dula=0;   P0=table[r];     //数码管段信号输出     dula=1;   dula=0;   wela=0;   P0=0x3d;     //数码管位信号输出   wela=1;   wela=0;   delay(5);    dula=0;   P0=table[0];     //数码管段信号输出     dula=1;   dula=0;   wela=0;   P0=0x3e;     //数码管位信号输出   wela=1;   wela=0;   delay(5);   }deng(){ if(r==1)   {for(;b<3;b++)  ///i的个数即为花样的个数     {      P1=aaa[b];      delay(100);     }b=0;   }  if(r==2)   {for(;c<4;c++)  ///i的个数即为花样的个数     {      P1=bbb[c];      delay(100);     }c=0;   }} void main(){ while(1){ EA=1;  ET0=1;  TMOD=0X01;  TH0=-50000/256;  TL0=-50000%256;  TR0=1;key();dis8();deng();r=1;}}void intserol() interrupt 1{ TH0=-50000/256;  TL0=-50000%256;}  上面是我写的 但是数码管显示不咋好,就是那流水灯赚的时间太多导致 展开
 我来答
皇冠电子设计
2011-11-11 · 超过16用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:33.9万
展开全部
没见过你这样发程序的,没个层次叫人怎么看吖,我实在是太有空了才来答你的题,大概看了下你的程序,数码管是静态显示的,你保持住IO口就好了,流水灯对数码管显示不影响,如果是动态显示,看你的程序,功能其实非常简单,那你就把流水灯程序嵌入到数码管程序里,比如数码管需要亮100ms, 而你的流水灯有三个状态,那你就写成数码管亮30ms,一个流水灯状态,数码管再亮30ms,再下一个流水灯状态,依次类推 因为程序是顺序执行的,所以数码管的动态显示很多时候会和其它功能冲突,这种时候最好用硬件来补偿,看你的题目,数码管就显示01和02而已,你用一个数码管显示1,2不就完了,那就什么冲突都没了,你保持IO状态他就固定显示了
杭州丹川科技
2024-12-24 广告
随着工业设备的自动化程度越来越高,各个行业的工控板的数量也越来越多,下面就介绍在维修中常用的几种方法。1、观察法:当我们拿到一块待维修的电路板时, 首先对它的外观进行仔细的观察。如果电路板被烧过, 那么在给电路板通电前, 一定要仔细检查电源... 点击进入详情页
本回答由杭州丹川科技提供
coolaa
2011-11-11 · TA获得超过408个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:189万
展开全部
没看你的程序,我不想发疯,不分格式跟乱码似的。只是提点建议:别学教科书上用那种动不动几毫秒的延时,尤其是在需要动态显示数码管的时候,不然你的数码管显示不闪烁才怪。用中断!省心省力。
如果你非要用延时,也可以,记住要让数码管动态扫描而不闪,一般频率至少要80Hz以上,也就是你大概在每13毫秒以内要把它们扫一遍,不管当时在处理什么,一定要停下来先进行扫描。不过这样程序就比较麻烦了,得用时间片做多任务了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式