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

89c51单片机用词语言编写题目要求是显示两种模式第一种当按键没按下时数码管显示01流水灯花样一当按键按下时数码管显示02流水灯花样2#include#defineuin... 89c51单片机 用词语言编写 题目要求是显示两种模式第一种 当按键没按下时数码管显示01 流水灯花样一 当按键按下时数码管显示02 流水灯花样2#include#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;} 上面是我写的 但是数码管显示不咋好,就是那流水灯赚的时间太多导致 展开
 我来答
荆鸥翦温韦
2019-07-15 · TA获得超过1213个赞
知道小有建树答主
回答量:1767
采纳率:66%
帮助的人:8.3万
展开全部
因为你都是用延时写的,所以,会出现这种情况,要不你试一下这样吧,流水灯的延时用定时中断写,在终端的服务程序里面写流水灯的移动,或者反过来,数码管的显示写在中断里面,这样整个程序的运行可以看成是一种并行的形式,这样显示会好一点。你上面写的是不是并行的,是顺序下来的。你试一下吧,把显示也写到定时中断的服务程序里面,主程序是另外一种显示,这样并行显示了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式