找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2991|回复: 11
打印 上一主题 下一主题
收起左侧

为什么我的流水灯和数码管不能同时工作啊

[复制链接]
跳转到指定楼层
楼主
ID:272089 发表于 2018-1-11 15:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
20黑币
#include <reg51.h>
#include <intrins.h>
#define         uchar unsigned char
#define  uint  unsigned int
sbit cs1=P3^5;sbit cs2=P3^6;sbit wr=P3^7;
void delay(uint i){while(i--);}
uchar code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar buf[8];
#define leddata P0
uchar c=0,t;
uchar min=0,sec=0;
void display(void)
{
    uchar i,j=0x7f;
        for(i=0;i<8;i++)
        {
           cs1=0;cs2=1;
           leddata=ledcode[buf[i]];wr=1;wr=0;
           cs1=1;cs2=0;
           leddata=j;wr=1;wr=0;
           delay(100);
           j=_cror_(j,1);
           leddata=0xff;wr=1;wr=0;
        }
}
void led()
{
   P2=0x3f;delay(50000);
   P2=0x0f;delay(50000);
   P2=0x03;delay(50000);
   P2=0x00;delay(50000);
   P2=0xc0;delay(50000);
   P2=0xf0;delay(50000);
   P2=0xfc;delay(50000);
   P2=0xff;delay(50000);
}
void main()
{
TMOD=0x11;
EA=ET0=TR0=1;
while(1)
{
   buf[0]=buf[1]=buf[2]=buf[3]=0xff;
   buf[4]=min/10%10;
   buf[5]=min%10;
   buf[6]=sec/10%10;
   buf[7]=sec%10;
   display();
   led();
   //if(sec>5&&min>=0)led();
   }
}

time0() interrupt 1
{
    TL0=(65536-50000)%256;
        TH0=(65536-50000)/256;
        c++;
        if(c>=20)
        {
        c=0;sec++;
        if(sec>=60)
         {
           sec=0;
           min++;
           if(min>=60)
           {
             min=0;
           }
         }
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:111634 发表于 2018-1-11 18:36 | 只看该作者
先学理论,打基础,否则,问题多多,事倍功半。
回复

使用道具 举报

板凳
ID:267121 发表于 2018-1-11 20:57 | 只看该作者
     我这里有一份完整的 不知道你现在还需要不?
回复

使用道具 举报

地板
ID:148578 发表于 2018-1-11 23:23 | 只看该作者
void display(void)
{
    uchar i,j=0x7f;
        for(i=0;i<8;i++)
        {
           cs1=0;cs2=1;
           leddata=ledcode[buf[i]];wr=1;wr=0;
           cs1=1;cs2=0;
           leddata=j;wr=1;wr=0;<<<<<<-------------wr=1;wr=0;代表什么?猜测是应该给一个脉冲,这样应该加上延时
           delay(100);
           j=_cror_(j,1);
           leddata=0xff;wr=1;wr=0;<<<<<<-------------wr=1;wr=0;代表什么?猜测是应该给一个脉冲,这样应该加上延时
        }
}
回复

使用道具 举报

5#
ID:148578 发表于 2018-1-11 23:45 | 只看该作者
void display(void)
{
    uchar i,j=0x7f;
        for(i=0;i<8;i++)
        {
           cs1=0;cs2=1;
           leddata=ledcode[buf[i]];wr=1;wr=0;
           cs1=1;cs2=0;
           leddata=j;wr=1;wr=0;<<<<<<<-----猜测wr需要给一个脉冲,要在两个指令中间增加延时
           delay(100);
           j=_cror_(j,1);
           leddata=0xff;wr=1;wr=0;<<<<<<<-----猜测wr需要给一个脉冲,要在两个指令中间增加延时
        }
}
回复

使用道具 举报

6#
ID:275057 发表于 2018-1-12 01:28 | 只看该作者
数码管建议放到定时器中
回复

使用道具 举报

7#
ID:275057 发表于 2018-1-12 01:30 | 只看该作者
显示程序最好是在定时器中断工作,不然延时太长会影响进程,
回复

使用道具 举报

8#
ID:269447 发表于 2018-1-12 12:38 | 只看该作者
delay()这玩意能不用就别用,实际开发基本都不带delay的
回复

使用道具 举报

9#
ID:272089 发表于 2018-1-13 07:46 | 只看该作者
qqqq11223344 发表于 2018-1-11 20:57
我这里有一份完整的 不知道你现在还需要不?

也是用的定时器?
回复

使用道具 举报

10#
ID:265553 发表于 2018-1-14 08:57 来自手机 | 只看该作者
是不是那里有问题了
回复

使用道具 举报

11#
ID:275955 发表于 2018-1-14 21:53 | 只看该作者

先学理论,打基础,否则,问题多多,事倍功半。
回复

使用道具 举报

12#
ID:279302 发表于 2018-1-24 15:37 | 只看该作者
有没有图,来个图看下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表