找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1959|回复: 7
收起左侧

两个单片机程序结合起来就不对?

[复制链接]
ID:690486 发表于 2020-3-18 21:59 | 显示全部楼层 |阅读模式
我有一个问题:我想让第一个led灯亮且数码管动态扫描显示,可是把这两个程序结合起来就不对,它们单个运行的时候是正确的,但是当把他们同时运行的时候就出现问题?我不知道是不是我锁存器那块操作不正确,请大神帮帮我。

单片机源程序如下:
1.#include "head.h"
void main()
{
        init();
        model=1;
        time=50;
        ZKB=20;
        //Timer_On();
        Select_Show(0);
        LED_On(1);
        while(1)
        {
                //LED_On(1);
                /*if(time)
                {
                        LED_On(1);
                }
                else
                {
                        LED_Off();
                        Timer_Off();
                }*/
                DIG_Show();
        }
}
2.*******************************************
头文件head.h
***********************************************/
#ifndef HEAD_H
#define HEAD_H
/*******************************/
//包含的头文件
#include <reg52.h>
#include <intrins.h>
#include "delay.h"
/*******************************/
//宏定义
#define uchar unsigned char
#define uint unsigned int
/*******************************/
//74LS138译码器
sbit LSA=P2^5;
sbit LSB=P2^6;
sbit LSC=P2^7;
extern void LS138(uchar i);//选择译码器输出
/*******************************/
//定时器
extern uint ZKB;//占空比单位:%
extern bit PWM;
extern uchar flag;
extern uint counter0;
extern uint counter1;
extern uchar counter_time;
extern uchar time;
extern void Timer0_init();//定时器0初始化设置
extern void Timer_On();//定时器开启
extern void Timer_Off();//定时器关闭
/*******************************/
//LED
extern void LED_On(uchar i);//LED亮
extern void LED_Off();//LED灭
/*******************************/
//初始化函数
extern void init();
/*******************************/
//数码管
extern uchar model;
extern uchar DIG_BUFFER[8];
extern uchar code DIG[16];
extern void DIG_Show();//数码管显示
extern void Select_DIG(uchar i);//选择数码管
extern void Select_Show(uchar i);//选择数码管显示模式 0倒计时 1温度
/*******************************/
//键盘
extern void KeyScan();//键盘扫描函数
#endif

3********************************************
head.c
***********************************************
#include "head.h"
/*******************************/
//74LS138译码器
void LS138(uchar i)//选择译码器输出
{
        switch(i)
        {
                case 0:LSA=0;LSB=0;LSC=0;break;
                case 4:LSA=0;LSB=0;LSC=1;break;
                case 5:LSA=1;LSB=0;LSC=1;break;
                case 6:LSA=0;LSB=1;LSC=1;break;
                case 7:LSA=1;LSB=1;LSC=1;break;
        }
}
/*******************************/
//定时器
uint ZKB;//占空比单位:%
bit PWM=0;
uchar flag;
uint counter0=0;
uint counter1=0;
uchar counter_time=0;
uchar time=0;
void Timer0_init()//定时器0初始化设置
{
        TH0=(65536-1)/256;
        TL0=(65536-1)%256;
        ET0=1;//开定时器0中断
}
void Timer0() interrupt 1
{
        TH0=(65536-1)/256;
        TL0=(65536-1)%256;
        counter0++;
        counter1++;
        if(counter0<(ZKB*10))
        {
                PWM=1;
        }
        else if((counter0>=(ZKB*10))&&(counter0<1000))
        {
                PWM=0;
        }
        else
        {
                counter0=0;
        }
        if(counter1>50000)
        {
                counter1=0;
                time--;
        }
}

void Timer_On()//定时器开启
{
        TMOD=0x01;
        Timer0_init();
        EA=1;
        TR0=1;
}
void Timer_Off()//定时器关闭
{
        EA=0;
        ET0=0;
        TR0=0;
        counter0=0;
        counter1=0;
        counter_time=0;
        PWM=0;
}
/*******************************/
//LED
void LED_On(uchar i)//LED亮
{
        
        switch(i)
        {
                case 1:P0=0xfe;break;
                case 2:P0=0xfd;break;
                case 3:P0=0xfb;break;
        }
        LS138(4);
        LS138(0);
}
void LED_Off()//LED灭
{
        LS138(4);
        P0=0xff;
        LS138(0);
}
/*******************************/
//初始化函数
void init()
{
        LS138(4);
        P0=0xff;
        LS138(0);
        //关闭蜂鸣器、继电器等无关外设
        LS138(5);
        P0=0x00;
        LS138(0);
        //数码管熄灭
        /*LS138(6);
        DIG_COM(8);
        P0=0xff;
        LS138(7);
        P0=0xff;*/
}
/*******************************/
//数码管
uchar model;
uchar code DIG[16]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
                    0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
uchar DIG_BUFFER[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//数码管缓存
void Select_DIG(uchar i)//选择数码管
{
        
        switch(i)
        {
                case 0:P0=0x01;break;
                case 1:P0=0x02;break;
                case 2:P0=0x04;break;
                case 3:P0=0x08;break;
                case 4:P0=0x10;break;
                case 5:P0=0x20;break;
                case 6:P0=0x40;break;
                case 7:P0=0x80;break;
        }
        LS138(6);
        LS138(0);
}
void DIG_Show()//数码管显示
{
        uchar x;
        for(x=0;x<8;x++)
        {
                Select_DIG(x);
                P0=0xff;
                P0=DIG_BUFFER[x];
                LS138(7);
                //while(counter1<1000);
                LS138(0);
                Delay1ms();
        }
}
void Select_Show(uchar i)//选择数码管显示模式 0倒计时 1温度
{
        switch(i)
        {
                case 0:
                DIG_BUFFER[0]=0xbf;
                DIG_BUFFER[1]=DIG[model];
                DIG_BUFFER[2]=0xbf;
                DIG_BUFFER[3]=0xff;
                DIG_BUFFER[4]=DIG[time/1000];
                DIG_BUFFER[5]=DIG[(time%1000)/100];
                DIG_BUFFER[6]=DIG[(time%100)/10];
                DIG_BUFFER[7]=DIG[time%10];
                break;
        }
}

全新升级版CT107S V1.5 原理图 【彩版】.pdf

165.66 KB, 下载次数: 6

回复

使用道具 举报

ID:690486 发表于 2020-3-18 22:02 | 显示全部楼层
这个就是蓝桥杯的原理图,里面led和数码管都是有锁存器的
回复

使用道具 举报

ID:328014 发表于 2020-3-18 22:08 | 显示全部楼层

单片机程序合并教程:http://www.51hei.com/bbs/dpj-157117-1.html
回复

使用道具 举报

ID:690486 发表于 2020-3-18 22:32 | 显示全部楼层
j就是我操作数码管的时候 led会全亮。。
回复

使用道具 举报

ID:711223 发表于 2020-3-18 22:40 | 显示全部楼层
头文件里面有问题
回复

使用道具 举报

ID:690486 发表于 2020-3-19 00:29 | 显示全部楼层
config_h 发表于 2020-3-18 22:40
头文件里面有问题

请问具体问题在哪块呢?我现在有点懵了
回复

使用道具 举报

ID:704640 发表于 2020-3-19 11:18 来自触屏版 | 显示全部楼层
检查检查是不是头文件有包含重复
回复

使用道具 举报

ID:690486 发表于 2020-3-19 18:02 | 显示全部楼层
已经解决,在对译码器输入端赋值的时候要整体赋值,不能单独赋值
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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