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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機時鐘問題,仿真可以實物數碼管很暗,蜂鳴器不響

[復制鏈接]
跳轉到指定樓層
樓主
ID:419540 發表于 2018-12-3 11:22 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1黑幣
時鐘數碼管顯示不完全,下面是代碼和圖,而且第二個數碼管不亮,最后一個數碼管很暗,蜂鳴器不響,仿真成功的,要實現的功能是按鍵按一次響一次,可以校時校分的

#include  "reg51.h"
#define char unsigned char
char code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                     0x80,0x90,0xff,0xbf};
//共陽極LED數碼管"0~9","滅"和"-"的字段碼
char code scan_con[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//位選擇碼
char data dis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};
//顯示緩沖區,時、分、秒初始為0,0x0b為"-"的編碼
char data timedata[3]={0x00,0x00,0x00};
//分別為秒、分和小時的值
char data ms50=0x00,con=0x00,con1=0x00,con2=0x00;

sbit  key0=P1^0;
sbit  key1=P1^1;
sbit  key2=P1^2;
sbit  beep=P1^7;

//1ms延時函數

delay1ms(int t)
{
int i,j;
for (i=0;i<t;i++)
        for (j=0;j<120;j++)
        ;
}

//按鍵處理函數

keyscan()
{
EA=0;
if (key0==0)
        {
        beep=0;
delay1ms(10);
           beep=1;
        while (key0==0);
        con++;
        TR0=0;
        ET0=0;
        if (con>=3)
                {
                con=0;
                TR0=1;
                ET0=1;}
        }
        if (con!=0)
                {
                if (key1==0)
                        {
                                beep=0;
                          delay1ms(10);
                           beep=1;
                        while (key1==0);
                        timedata[con]++;
                        if (con==2) con1=24;else con1=60;                        
if (timedata[con]>=con1)
                                {timedata[con]=0;}
                        }
                }
        if (con!=0)
                {
                if (key2==0)
                        {
                                beep=0;
                        delay1ms(10);
                            beep=1;
                        while (key2==0);
                        timedata[con]--;
                        if (con==2) con2=23;else con2=59;                        
                        if (timedata[con]<=0)
                                {timedata[con]=con2;}
                        }
                }
         EA=1;
        }

        //數碼管顯示函數

        scan()
        {
        char k;
        dis[0]=timedata[0]%10;dis[1]=timedata[0]/10;
    dis[3]=timedata[1]%10;dis[4]=timedata[1]/10;
    dis[6]=timedata[2]%10;dis[7]=timedata[2]/10;
    for (k=0;k<8;k++)
                {
                P0=dis_7[dis[k]];P2=scan_con[k];delay1ms(1);P2=0x00;
                }
        }
        
        //主函數

        main()
        {
        TH0=0x3c;
        TL0=0xb0;
        TMOD=0x01;
        ET0=1;
        TR0=1;
        EA=1;
        while (1)
                {
                scan();
                keyscan();
                }
}

//定時器/計數器T0中斷服務函數

void time_intt0(void) interrupt 1
{
    ET0=0;
    TR0=0;
    TH0=0x3c;
    TL0=0xb0;
    TR0=1;
    ms50++;
if (ms50==20)
        {
        ms50=0x00;timedata[0]++;
        if (timedata[0]==60)
                {
                        timedata[0]=0;timedata[1]++;
                        if (timedata[1]==60)
                        {
                        timedata[1]=0;timedata[2]++;
                        if (timedata[2]==24)
                                {
                                timedata[2]=0;
                                }
                        }
                }
        }
        ET0=1;
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:316832 發表于 2018-12-3 14:54 | 只看該作者
大概看了一下樓主的程序,當調用按鍵子函數的時候就停止顯示了,可能需要把顯示程序移入定時中斷自動掃描顯示這樣就不斷在掃描按鍵時中斷顯示了。外出搬磚去了,回來再研究一下
回復

使用道具 舉報

板凳
ID:316832 發表于 2018-12-3 20:44 | 只看該作者

#include  "reg51.h"
#define char unsigned char
char code dis_7[12]={//我的實驗板引腳連接不規則,所以段碼也不一樣
                                0x21,  //"0"
                0xEB,  //"1"
                0x85,  //"2"
                0x83,  //"3"
                0x4B,  //"4"
                0x13,  //"5"
                0x11,  //"6"
                0xAB,  //"7"
                0x01,  //"8"
                0x03,  //"9"
                                0xFF,  //""0a
                0xDF,  //"-"0b
                     };//{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
//共陽極LED數碼管"0~9","滅"和"-"的字段碼
char code scan_con[8]={0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f};//{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//位選擇碼
char data dis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};
//顯示緩沖區,時、分、秒初始為0,0x0b為"-"的編碼
char data timedata[3]={0,8,11};
//分別為秒、分和小時的值
char data ms50=0,con=0,con1=0,con2=0;

//char sec,min,hours;

sbit  key0=P1^6;
sbit  key1=P1^5;
sbit  key2=P1^4;
sbit  beep=P1^7;

//1ms延時函數

delay1ms(int t)
{
int i,j;
for (i=0;i<t;i++)
        for (j=0;j<120;j++)
        ;
}

//按鍵處理函數

keyscan()
{
EA=0;
if (key0==0)
        {
        beep=0;
        delay1ms(10);
           beep=1;
        while (key0==0);
        con++;
        TR0=0;
        ET0=0;
        if (con>=3)
                {
                con=0;
                TR0=1;
                ET0=1;}
        }
        if (con!=0)
                {
                if (key1==0)
                        {
                                beep=0;
                          delay1ms(10);
                           beep=1;
                        while (key1==0);
                        timedata[con]++;
                        if (con==2) con1=24;else con1=60;                        
if (timedata[con]>=con1)
                                {timedata[con]=0;}
                        }
                }
        if (con!=0)
                {
                if (key2==0)
                        {
                                beep=0;
                        delay1ms(10);
                            beep=1;
                        while (key2==0);
                        timedata[con]--;
                        if (con==2) con2=23;else con2=59;                        
                        if (timedata[con]<=0)
                                {timedata[con]=con2;}
                        }
                }
         EA=1;
        }

        //數碼管顯示函數

        scan()
        {
        char k;
        dis[0]=timedata[0]%10;dis[1]=timedata[0]/10;
    dis[3]=timedata[1]%10;dis[4]=timedata[1]/10;
    dis[6]=timedata[2]%10;dis[7]=timedata[2]/10;
    for (k=0;k<8;k++)
                {
                P0=dis_7[dis[k]];P2=scan_con[k];delay1ms(1);P2=0x00;
                }
        }
        
        //主函數

        main()
        {
        TH0=0x3c;
        TL0=0xb0;
        TMOD=0x01;
        ET0=1;
        TR0=1;
        EA=1;
        while (1)
                {
                scan();
                keyscan();
                }
}

//定時器/計數器T0中斷服務函數

void time_intt0(void) interrupt 1
{
    ET0=0;
    TR0=0;
    TH0=0x3c;
    TL0=0xb0;
    TR0=1;
    ms50++;
        if (ms50==10)//我是用6Mhz晶振
        {
        ms50=0x00;timedata[0]++;
        if (timedata[0]==60)
                {
                        timedata[0]=0;timedata[1]++;
                        if (timedata[1]==60)
                        {
                        timedata[1]=0;timedata[2]++;
                        if (timedata[2]==24)
                                {
                                timedata[2]=0;
                                }
                        }
                }
        }
        ET0=1;
}經測試顯示正常

評分

參與人數 1黑幣 +12 收起 理由
zkele + 12 回帖助人的獎勵!以資鼓勵!

查看全部評分

回復

使用道具 舉報

地板
ID:316832 發表于 2018-12-3 20:45 | 只看該作者
請參考,樓主請先確定你的數碼管是共陰還是共陽,段碼是否一致,晶振是多少M的,然后慢慢查原因,祝你成功

評分

參與人數 1黑幣 +12 收起 理由
zkele + 12 回帖助人的獎勵!以資鼓勵!

查看全部評分

回復

使用道具 舉報

5#
ID:433249 發表于 2018-12-3 20:49 | 只看該作者
硬件圖呢?
回復

使用道具 舉報

6#
ID:157238 發表于 2018-12-3 21:09 | 只看該作者
先檢查一下硬件電路有沒有問題。單片機的io口的驅動能力是很弱的,輸出的電流很小,數碼管所需的電流較大,所以需要加三極管放大一下,這應該就是你數碼管顯示很暗的原因,蜂鳴器的話你看看你使用的蜂鳴器是有源的還是無源的,有源蜂鳴器的話里面有振蕩源,通直流電的話會一直響,無源蜂鳴器的話里面沒有振蕩電源,所以只當通電的一瞬間會“嗶”的響一下,需要輸出脈沖波才能不斷的觸發,不斷的響。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区二区三区在线 | 在线免费毛片 | 91人人视频在线观看 | 国产三级一区二区 | 视频一区在线 | 国产精品99久久久精品免费观看 | 国产欧美精品一区二区三区 | 孕妇一级毛片 | 一区二区三区免费在线观看 | 国产区视频在线观看 | 国产美女在线观看 | 老司机久久 | h视频在线免费 | 日韩在线一区二区 | 久久亚洲一区二区 | 中文字幕高清av | 国内精品免费久久久久软件老师 | 亚洲精品日韩综合观看成人91 | 91精品国产乱码久久久久久久久 | 亚洲视频二区 | 一区二区三区中文字幕 | 中文字幕加勒比 | 无人区国产成人久久三区 | 国产精品亚洲第一区在线暖暖韩国 | 精品亚洲一区二区三区 | 先锋资源在线 | 日韩在线免费视频 | 伊人网综合 | 久久久www成人免费精品张筱雨 | 韩日一区| 一区二区三区欧美 | 国内自拍视频在线观看 | www.天天操.com| 国产一区二区在线免费视频 | 黄色三级免费网站 | 国产精品亚洲一区 | 国产欧美在线一区 | www.国产精| 午夜精品一区二区三区在线观看 | 久久一级大片 | 国产精品国色综合久久 |