找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1535|回复: 1
收起左侧

单片机数据存储器扩展程序

[复制链接]
ID:787557 发表于 2020-6-23 12:19 | 显示全部楼层 |阅读模式
数据存储器扩展,一部分空间存放0~9,一部分空间存放A~F,当按下按键K1时,取出0~9的数据在数码管上依次显示;当按下按键K2时,取出A~F的数据在数码管上依次显示;再keil 4上用了c语言做了程序,软件转换的汇编看不懂,有没有大神能写一个完整的汇编
#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)                                                                                                                 //延时函数 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;
                }
         }
}

回复

使用道具 举报

ID:1 发表于 2020-6-23 20:25 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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