久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3270|回復: 4
打印 上一主題 下一主題
收起左側

單片機一位數碼管秒表顯示程序有問題

[復制鏈接]
跳轉到指定樓層
樓主
300黑幣
程序要求按 A 鍵再按 B 鍵后,顯示兩鍵按下之間的時間 t(t <60s),單位為 ms。由于程序框圖的規定要求,我在一位大佬的程序基礎上修改了display()顯示函數,可是修改后能正常顯示,但再一次按下A鍵后沒有反應,仍然循環顯示時間,請問這個函數應該怎樣修改才能實現按鍵后重新計時呢?
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit A1=P3^4;
sbit A2=P3^5;
uint m=0;
uint count,t,d,e,f;
uchar code table[]={0x14,0xde,0x38,0x1a,0xd2,0x13,0x11,0x9e,0x10,0x12};
uchar cnt[6]={0};//小數緩存
bit flag=0;
bit init=0;

void delay(void)   //誤差 0us
{
    unsigned char a,b,c;
    for(c=67;c>0;c--)
        for(b=124;b>0;b--)
            for(a=167;a>0;a--);
}

void start()
{
        TMOD=0x01; //T0 使用工作方式 1
        TH0=(65536-1000)/256; //1ms 定時
        TL0=(65536-1000)%256;
        EA=1;
        ET0=1;
            TR0=1;
}

void display()  //顯示子程序,從第一位開始逐位顯示't 00秒 000毫秒'
{
        static uint j;
        if(flag)
                P0=0xbf;//等待計數時顯示'-'
        else
        {        
                                if(init==1)
                                for(j=6;j>0;j--)
                                {P0=cnt[j];
                                delay();
                                }
        }
}
void main(void)
{
        start();
        P0=0xb7;//上電提示符
        while(1)
        {
                if(A1==0 && flag==0) //按鍵掃描
                {
                        flag=1;
                        count=0;                                
                        t=0;
                        init=1;                                                
                }
                if(A2==0 && flag==1)
                {
                                                while(!A2);
                        flag=0;
                        cnt[6]=0xbf;
                        cnt[5]=table[t/10];
                        cnt[4]=table[t%10];//加秒點
                        cnt[3]=table[count/100];
                        cnt[2]=table[count/10%10];
                        cnt[1]=table[count%10];
                        m=0;
                }
                                display();
        }
}

void time0(void) interrupt 1 //T0 中斷服務子程序
{
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        if(flag)
        {
                count++;
                if(count>=1000)
                {
                        count=0;
                        t++;
                        if(t>=60)
                        {
                                t=0;
                        }
                }
        }
}

捕獲.PNG (103.72 KB, 下載次數: 70)

捕獲.PNG

截圖.jpg (848.47 KB, 下載次數: 66)

截圖.jpg

最佳答案

查看完整內容

//----------------試試以下代碼 #include #define uchar unsigned char #define uint unsigned int sbit A1=P3^4; sbit A2=P3^5; uint m=0; //uint t,d,e,f; uchar code table[]={0x14,0xde,0x38,0x1a,0xd2,0x13,0x11,0x9e,0x10,0x12}; uchar cnt[6]={0};//小數緩存 bit flag=0; bit init=0; unsigned long SysTick,count,t; //new add void delay(void) //誤差 0us { unsigned char a,b,c; fo ...
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:451718 發表于 2020-7-16 11:27 | 只看該作者
//----------------試試以下代碼
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit A1=P3^4;
sbit A2=P3^5;
uint m=0;
//uint t,d,e,f;
uchar code table[]={0x14,0xde,0x38,0x1a,0xd2,0x13,0x11,0x9e,0x10,0x12};
uchar cnt[6]={0};//小數緩存
bit flag=0;
bit init=0;

unsigned long SysTick,count,t;     //new add

void delay(void)   //誤差 0us
{
    unsigned char a,b,c;
    for(c=67;c>0;c--)
        for(b=124;b>0;b--)
            for(a=167;a>0;a--);
}

void start()
{
        TMOD=0x01; //T0 使用工作方式 1
        TH0=(65536-1000)/256; //1ms 定時
        TL0=(65536-1000)%256;
        EA=1;
        ET0=1;
            TR0=1;
}

void display()  //顯示子程序,從第一位開始逐位顯示't 00秒 000毫秒'
{
        static uint j;
        if(flag)
                P0=0xbf;//等待計數時顯示'-'
        else
        {        
                                if(init==1)
                                for(j=6;j>0;j--)
                                {P0=cnt[j];
                                delay();
                                }
        }
}

void main(void)
{
        start();
        P0=0xb7;//上電提示符
        while(1)
        {
                if(A1==0) //按鍵掃描
                {
                        flag=1;
                        //count=0;                                
                        //t=0;
                        //init=1;                                                
                }
                if(A2==0 && flag==1)
                {
                     while(!A2);
                        flag=0;
                        cnt[6]=0xbf;
                        cnt[5]=table[t/10000];
                        cnt[4]=table[t/1000%10];//加秒點
                        cnt[3]=table[t/100%10];
                        cnt[2]=table[t/10%10];
                        cnt[1]=table[t%10];
                        //m=0;
                }
                 display();
        }
}

void time0(void) interrupt 1 //T0 中斷服務子程序
{
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
                SysTick++;
        if(A1==0)
        {
            count = SysTick;               
        }
                if(A2==0 && flag==1)
        {
                    t = SysTick - count;
                        flag = 0;
            }
}
回復

使用道具 舉報

板凳
ID:804115 發表于 2020-7-16 12:25 | 只看該作者
本帖最后由 1692483014 于 2020-7-16 12:31 編輯

    display函數一行改為
if(init==1&&flag==0)
就好了
回復

使用道具 舉報

地板
ID:804115 發表于 2020-7-16 12:29 | 只看該作者
剛寫錯了是
    if(init==1&&flag==0)
回復

使用道具 舉報

5#
ID:739545 發表于 2020-7-16 13:57 | 只看該作者
把t=0放到cnt[1]=table[count%10];
                        m=0;
后面,并使EA=0,在if(A1==0 && flag==0) //按鍵掃描里面添加EA=1;
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区 日韩 | 精品国产乱码久久久久久影片 | 久久精品国产一区二区三区不卡 | 免费一区二区 | 最近最新中文字幕 | 日本不卡一区二区三区 | 久久综合av | 久久成人高清视频 | 天堂在线1 | 国产一区二区电影网 | 午夜欧美一区二区三区在线播放 | 黄色一级电影在线观看 | 中文字幕精品一区二区三区在线 | 麻豆亚洲| 久久亚洲免费 | 欧美一区二区大片 | 成人精品免费视频 | 2019天天干夜夜操 | 日韩中文在线 | 久久国内 | 国产免费让你躁在线视频 | 在线中文字幕亚洲 | 精品一区二区三区91 | 国产成人99久久亚洲综合精品 | 欧日韩在线观看 | 久久精品a | 成人黄色三级毛片 | 久久精品国产一区二区 | 亚洲精品1区 | 日韩中文字幕 | 中文字幕av亚洲精品一部二部 | 天堂视频中文在线 | 精品一区二区三区在线观看 | 久婷婷 | 欧美日韩三级视频 | 国产精品久久久久久婷婷天堂 | av一级久久 | aacc678成免费人电影网站 | 欧产日产国产精品国产 | 日本一区二区不卡视频 | 在线免费观看毛片 |