一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

搜索
楼主: bg1cxf

寻找数码管按键累加显示范例

[复制链接]
发表于 2013-5-14 22:15 | 显示全部楼层
楼主要不要汇编的,要的话明天我复制一个程序上来,随便那个按键都可以。
用164驱动显示和其他显示是一样的,只是程序处理不一样。
回复

使用道具 举报

发表于 2013-5-14 22:23 | 显示全部楼层

RE: 寻找数码管按键累加显示范例

chjj0 发表于 2013-5-14 19:22 static/image/common/back.gif
由于图上没有画出按键位置,如果是我的话,我选择按键放在外中断引脚处。
平时CPU扫描数码管,有按键的时候 ...

如此简单的程序按键似乎没必要用中断吧。
回复

使用道具 举报

发表于 2013-5-15 13:54 | 显示全部楼层
benli 发表于 2013-5-14 22:23 static/image/common/back.gif
如此简单的程序按键似乎没必要用中断吧。

我倒觉得中断用起来简单,更符合人类的思维方法
回复

使用道具 举报

 楼主| 发表于 2013-5-16 08:42 | 显示全部楼层
现在能显示,也能工作了。只能在硬件上显示没有任何问题,为什么仿真软件不能显示呢?


#include<reg51.h>
char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
char disp[]={4,3,2,1};
unsigned char TempData[8];
sbit clk=P2^7;
sbit dat=P2^6;
sbit K10=P2^2;

sbit K1=P1^4; //左极限位置
sbit K2=P1^3; //--
sbit K3=P1^0;//中间位置
sbit K4=P1^1;//++

unsigned char TIM0H;
unsigned char TIM0L;
void delay(unsigned int i); //函数声明

unsigned int NUM;
unsigned char scan,i,j,byte; //函数声明

/*------------------------------------------------*/
void Delay(unsigned int i)
        {
                while(--i);
        }

/*------------------------------------------------*/
main()
{

TMOD=0x11;   //定时器1工作在方式1

     TH1=0xb1;   //20ms定时
     TL1=0xe0;   
   
  EA=1;     
  ET1=1;       //允许定时/计数器1 中断
  TR1=1;       //启动定时/计数器1 中断
  
  TH0=0xfa;               //1.5ms定时
  TL0=0x24;       
       
ET0=1; //允许定时/计数器0 中断
TR0=1;  //启动定时/计数器0 中断

NUM=1500;        
       


        while(1)
        {
        if(K4==0)
                 {
                 delay(NUM);
                 if(K4==0)
                         {
                         NUM++;
                         if(NUM>=20000)NUM=2000;
                         while(K4==1) delay(NUM);
                        }
                 
                }


        if(K2==0)
                {
                delay(NUM);
                if(K2==0)
                        {
                        NUM--;
                if(NUM<=100)NUM=100;
                while(K2==1) delay(NUM);
                }
               
                }  
        if(K3==0)
                {
                delay(10);
                if(K3==0) NUM=1360;
                }
        if(K1==0)
                {
                delay(10);
                if(K1==0) NUM=1500;
                }



TIM0H=((65536-NUM)/256);
TIM0L=((65536-NUM)%256);

                        TempData[0]=tab[NUM/10000];//分解显示信息,如要显示68,则68/10=6  68%10=8
                        TempData[1]=tab[(NUM%10000)/1000];
                        TempData[2]=tab[((NUM%10000)%1000/100)];
                        TempData[3]=tab[(((NUM%10000)%1000%100)/10)];
                        TempData[4]=tab[(((NUM%10000)%1000%100)%10)];
                        TempData[5]=0xc0;
                        TempData[6]=0xc0;
                        TempData[7]=0xc0;
                        TempData[8]=0xc0;


        scan=tab[NUM/10000];  
                for(i=0;i<8;i++)
                {
                        clk=0;   
                        dat=scan&0x40;
                        delay(50);  
                        //j=TempData[i];   
                        P0=TempData[i];
                        delay(50);   
                        clk=1;   
                        scan<<=2;  
                }
                 
        }

}




/*********************************************************
  中断服务函数
**********************************************************/

void Time1(void) interrupt 3   //3定时器1的中断号  1定时器0的中断号 0外部中断1 2外部中断2  4串口中断
{
     TH1=0xb1;   //20ms定时
     TL1=0xe0;
    K10=~K10;
   
TR0=1; //启动定时/计数器0 中断

  }

void Time0(void) interrupt 1  //3定时器1的中断号  1定时器0的中断号 0外部中断1 2外部中断2  4串口中断

{
   

TH0=TIM0H;
TL0=TIM0L;
K10=~K10;
  
TR0=0; //关闭定时/计数器0 中断


}

回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-20 03:20 , Processed in 0.034156 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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