找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求大佬帮忙把下面单片机程序改成非中断函数

[复制链接]
跳转到指定楼层
楼主
ID:418072 发表于 2018-10-31 11:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>

sbit wei1=P3^4;
sbit wei2=P3^5;
sbit wei3=P3^6;
sbit wei4=P3^7;
sbit led=P1^0;

unsigned char segdat[16]=
{0xc0,
0xf9,
0xa4,
0xb0,
0x99,
0x92,
0x82,
0xf8,
0x80,
0x90,        };

unsigned int cnt=0,kevval;
void delay(unsigned int x);
void display_seg4(unsigned int dat,unsigned char tim);
void INIT_int0(void);

unsigned int js=0;
unsigned char flag=0;

void main(void)
{
INIT_int0();
while(1)
{
   if(flag==1)
   {
  js++;
  if(js>=10000)
  {
    js=0;
  }
}
  if(flag==0)
  {
     js=0;
  }
  display_seg4(js,2);
}
}

void zduan(void) interrupt 0
{
flag++;
if(flag==3)
flag=0;
}

void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
{
   for(j=0;j<100;j++)
   {
     ;
   }
}
}

void INIT_int0(void)
{
IT0=1;
IE0=0;
EX0=1;
EA=1;
}

void display_seg4(unsigned int dat,unsigned char tim)
{
unsigned char tmp;
tmp=dat/1000%10;
P2=segdat[tmp];
wei1=1;
delay(20);P2=0xff;wei1=0;
tmp=dat/100%10;
P2=segdat[tmp];
wei2=1;
delay(20); P2=0xff;wei2=0;
tmp=dat/10%10;
P2=segdat[tmp];
wei3=1;
delay(20); P2=0xff;wei3=0;
tmp=dat%10;
P2=segdat[tmp];
wei4=1;
delay(20); P2=0xff;wei4=0;

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

使用道具 举报

沙发
ID:277550 发表于 2018-10-31 23:21 | 只看该作者
这是外部中断,不要外部中断,就改成主循环中自动计数、延时累加,,,,,,,,,,,
回复

使用道具 举报

板凳
ID:149144 发表于 2018-11-1 12:12 | 只看该作者
不知道你的具体意思,附件里有仿真,希望对你有帮助按键表示开始和清零

#include <reg51.h>

sbit wei1 = P3^4;
sbit wei2 = P3^5;
sbit wei3 = P3^6;
sbit wei4 = P3^7;
sbit ledA  = P1^0;
sbit ledB  = P1^1;

sbit ButtonA = P3^2;        // * *
sbit ButtonB = P3^3;        // * *

#define Seg_7_4 P2                // * *

unsigned char segdat[10]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };

//unsigned int cnt = 0,kevval = 0;

void delay(unsigned int x);
void initTimer(void);
void display_seg4(unsigned int dat);//,unsigned char tim

void INIT_int0(void);

unsigned int js = 0;
unsigned char flag  = 0;
unsigned char times = 0;
void main(void)
{
        initTimer();
        INIT_int0();
        TR0 = 1;
        ET0 = 1;
        EA  = 1;
        ButtonA = 1;
        ButtonB = 1;

        while(1)
        {       
                display_seg4(js);//   *  *       
                if(flag == 0)
                {
                        times = 0;//清零
                        js = 0;//清零  JS 计数 ? 还是剑圣 ?
                }
        }
}
//  * *
void timer0(void) interrupt 1// 50 000 us = 50ms
{
        TH0=0x3c;
        TL0=0xb0;
        if(flag == 1)
        {
                if(++times > 20)// 50ms * 20 = 1s  想看效果 这个改小
                {
                        times = 0;
                        if(++js > 9999)
                        {
                                js = 0;
                        }                       
                }
        }       
}
       
void zduan(void) interrupt 0//**
{
        delay(2);
        if(ButtonA == 0)
        {
                if(++flag >1 )flag=0;//        * *   改成 2   2的时候就是暂停 3=0
        }       
}

void initTimer(void)//  *  *
{
TMOD=0x1;
TH0=0x3c;
TL0=0xb0;
}

void delay(unsigned int x)
{
        unsigned int i,j;
        for(i=0;i<x;i++)
        {
                 for(j=0;j<100;j++)
                {
                        ;               
                }
        }
}

void INIT_int0(void)
{
        IT0=1;
        IE0=0;
        EX0=1;
        EA=1;
}

void display_seg4(unsigned int dat)//,unsigned char tim  //        * *
{
        unsigned char tmp;
        tmp = dat/1000;
        Seg_7_4 = segdat[tmp];
        wei1 = 1;
        delay(2);//        *        *
       
        Seg_7_4 = 0xff;
        wei1 =0;
       
        tmp = dat/100;
        Seg_7_4  = segdat[tmp];
        wei2 = 1;
        delay(2);
       
        Seg_7_4 = 0xff;
        wei2 = 0;
       
        tmp = dat/10;
        Seg_7_4 = segdat[tmp];
        wei3 = 1;
        delay(2);
       
        Seg_7_4 = 0xff;
        wei3 = 0;
       
        tmp = dat%10;
        Seg_7_4 = segdat[tmp];
        wei4 = 1;
        delay(2);
       
        Seg_7_4 = 0xff;
        wei4 = 0;

}


51.rar

54.2 KB, 下载次数: 6

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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