找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1627|回復(fù): 1
收起左側(cè)

單片機數(shù)據(jù)存儲器擴展程序

[復(fù)制鏈接]
ID:787557 發(fā)表于 2020-6-23 12:19 | 顯示全部樓層 |閱讀模式
數(shù)據(jù)存儲器擴展,一部分空間存放0~9,一部分空間存放A~F,當(dāng)按下按鍵K1時,取出0~9的數(shù)據(jù)在數(shù)碼管上依次顯示;當(dāng)按下按鍵K2時,取出A~F的數(shù)據(jù)在數(shù)碼管上依次顯示;再keil 4上用了c語言做了程序,軟件轉(zhuǎn)換的匯編看不懂,有沒有大神能寫一個完整的匯編
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit wei=P2^0;
sbit KEY1=P1^1;
sbit KEY2=P1^2;

uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar table2[]={0x77,0x7c,0x39,0x5e,0x79,0x71};

uint flag,t1,t2,time;

void delayms(uint xms)                                                                                                                 //延時函數(shù) 1ms
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}

void display(uint a)
{
        if(a==1)
        {
                        wei=1;
                        P0=table1[t1];               
        }
        if(a==2)
        {
                        wei=1;
                        P0=table2[t2];
        }
}

void main()
{
        TMOD=0x22;                                                                                                                                 // 定時器 0 ,1
        TH0=0x06;
        TL0=0x06;                                                                                                                                 // 定時器0賦初值 計時 0.25ms,1000 次為 0.25s,4000 次為一秒
        TH1=0x06;
        TL1=0x06;                                                                                                                                 // 定時器1賦初值 計時 0.25ms,1000 次為 0.25s,4000 次為一秒
        ET0=1;                                                                                                                                        //開定時器0中斷
        ET1=1;                                                                                                                                        //開定時器1中斷
        EA=1;
        flag=2;
        time=0;
        t1=0;
        t2=0;
        TR0=1;
        TR1=1;
        while(1)
        {
                switch(flag)
                {
                        case 1:display(1);break;
                        case 2:display(2);break;
                }
                if(KEY1==0)
                {
                        delayms(3);
                        if(KEY1==0)
                        {
                                flag=1;
                        }
                }
                        if(KEY2==0)
                {
                        delayms(4);
                        if(KEY2==0)
                        {
                                flag=2;      
                        }
                }      
        }      
}
void time0(void) interrupt 1                                                                                                   //定時器0中斷,定時器0用于搶答倒計時
{
         time++;
         if(time==4000)
         {
                 t1++;
                if(t1==10)
                {
                        t1=0;
                }
                time=0;      
         }
}
                                                                                                                                                        //定時器1中斷,定時器1用于作答倒計時
void time1() interrupt 3
{
          time++;
        TH1=0x06;
        TL1=0x06;
        if(time==4000)
         {
                 time=0;
                 t2++;
                if(t2==6)
                {
                        t2=0;
                }
         }
}

回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2020-6-23 20:25 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表