找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1808|回复: 6
收起左侧

关于8051单片机开发板秒表程序问题,数组没办法初始化

[复制链接]
ID:164602 发表于 2019-1-2 08:23 | 显示全部楼层
一点看法吧——程序我还没有读通
第一:你照片上的右四位数码管的点亮的问题,不是什么数组初始化问题,是消隐问题
            case(7):
                LSA=1;LSB=1;LSC=1; break;//显示第7位   
        }
    }
    P0 = LedBuff[i];
                j=10;                                                 //扫描间隔时间设定
                while(j--);       
                P0=0x00;//消隐
我在你的显示函数中加点东西,就不亮了,就只有最左的数码管是亮的。
第二:看你的程序结构(虽然没全部读通),但你的显示和按键函数都放在中断里,是很不好的——一是让你的定时很不准确,二是显示和按键在不中断时不能执行——我有你同样的板子,按键根本没用,长按都不行,具体原因还没找到,但这个结构很不好,其实就是编程思路问题。
我这里有别人的一个程序,给你看看,功能是完整的哦——一键秒表

//上电待令,按键k3计时开始,再按计时停止,再按清0,再按开始,周而复始。
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;//连接译码器,选择点亮的数码管
sbit k3=P3^2;//外部中断按键
uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
uchar Cntus=0,Cnt100ms,Cnt1s=0;//中断计时变量
bit zantin=0;                                        //暂停标志


/***********定时器初始化程序****************/
void Timer0Init(void)                //2500微秒@12.000MHz
{
        TMOD= 0x01;                //设置定时器模式
        TL0 = 0x3C;                //设置定时初值
        TH0 = 0xF6;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
        EA=1;                        //开总中断
        ET0=1;                //开定时器0中断
}
/***********按键扫描程序****************/
void keyscan()        
{
        static uint count2=0,count1=0;        //计数变量                        
        static bit key_sign=0;                                //按键状态标志
        if(k3==0)                                //检测输入如果为0
        {
                count1++;                                        //计数延时消抖
                if((count1>=500)&&(key_sign==0))//检测按键如果为0
                {                        
                        key_sign=1;                //按键状态标志置1,防止重复响应
                        count2++;
                        if(count2>=3)
                                count2=0;
                        switch(count2)
                        {
                                case 0:        Cntus=0;
                                                Cnt100ms=0;
                                                Cnt1s=0;        break;//清0
                                case 1:        zantin=1;   break;//计时
                                case 2:        zantin=0;        break;//暂停
                        }               
                }
        }
        else
        {
                count1=0;                                //计数变量清0
                key_sign=0;                                //按键状态标志清0
        }
}
void display()//显示程序
{
        static uchar  i=0;
        P0=0x00;//消隐
        switch(i)
        {
                case(0):
                LSA=0;LSB=1;LSC=1;P0=table[Cnt1s/10];i++; break;//显示第5位
                case(1):
                LSA=1;LSB=0;LSC=1;P0=table[Cnt1s%10]|0x80;i++; break;//显示第6位
                case(2):
                LSA=0;LSB=0;LSC=1;P0=table[Cnt100ms];i=0; break;//显示第7位
        }
}
/***************主程序****************/
void main()
{
        Timer0Init();                                //定时器初始化
        while(1)
        {
                keyscan();                                //按键扫描
        }
}
/**************中断服务程序*****************/
void timer0() interrupt        1//2500微秒@11.0592MHz
{
        TL0 = 0x00;                //设置定时初值
        TH0 = 0xF7;                //设置定时初值
        Cntus++;                                        //中断变量Cntus自+1
        if(Cntus>=40)                                //10ms
        {
                Cntus=0;                                //清0
                if(zantin==1)                        //暂停/启动
                        Cnt100ms++;                        //毫秒计数
                if(Cnt100ms>=10)
                {
                        Cnt100ms=0;
                        Cnt1s++;                                //秒计数
                        if(Cnt1s>=60)
                                Cnt1s=0;
                }
        }
        display();                                        //显示程序
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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