打印

帮忙看下程序,顺便给个思路

[复制链接]
1139|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kxc2008|  楼主 | 2011-11-1 16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问下如何解决数码在加一的时候,数码管不灭,刚写程序,有什么好建议欢迎拍砖
#include<reg52.h>
#include < intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit dis1=P2^0;
sbit dis2=P2^1;
sbit dis3=P2^2;
sbit dis4=P2^3;
sbit key1=P1^4;
sbit key2=P1^5;
sbit key3=P1^6;
sbit key4=P1^7;
uchar PWM;
void key();
void keyled();
void init();
sbit  BEEP =P2^4 ;       //蜂鸣器
void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);
void display(uchar disnum);
void delay5ms(uchar a);
void display_menu(uchar numdis);
uint num=1,num2=0;
uchar code number[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

void main()
{
init();
while(1)
  {
key();
  }
}

void display(uchar disnum)
{
uchar aa,bb,cc,dd;
aa=disnum/1000;
bb=disnum%1000/100;
cc=disnum%100/10;
dd=disnum%10;
dis1=0;
P0=0x83;
delay5ms(5);
dis1=1;
dis2=0;
P0=number[bb];
delay5ms(5);
dis2=1;
dis3=0;
P0=number[cc];
delay5ms(5);
dis3=1;
dis4=0;
P0=number[dd];
delay5ms(5);
dis4=1;   
}

void display_menu(uchar numdis)
{
uchar qin,bai,shi,ge;
qin=numdis/1000;
bai=numdis%1000/100;
shi=numdis%100/10;
ge=numdis%10;
dis1=0;
P0=0xa1;
delay5ms(10);
dis1=1;
dis2=0;
P0=number[bai];
delay5ms(10);
dis2=1;
dis3=0;
P0=number[shi];
delay5ms(10);
dis3=1;
dis4=0;
P0=number[ge];
delay5ms(10);
dis4=1;
}

void key()
{
if(!key1)
  {
  delay5ms(40);
  if(!key1);
  delay5ms(40);
  keyled();
  }
if(!key2)
  {
delay5ms(50);
if(!key2)
delay5ms(50);
num++;
if(num==256)
    {
num=1;
    }
  }
if(!key3)
  {
delay5ms(50);
  if(!key3)
  delay5ms(50);
  num--;
if(num==1)
    {
num=1;
    }
  }
display_menu(num);
}

void keyled()
{
while(1)
{
if(!key2)
  {
delay5ms(50);
if(!key2)
//delay5ms(50);
for(PWM=0x7f;PWM!=0xff;PWM++){delayms(10);}
num2++;
if(num2==100)
    {
num2=0;
    }
  }
if(!key3)
  {
delay5ms(50);
  if(!key3)
  //delay5ms(50);
for(PWM=0xff;PWM!=0x02;PWM--){delayms(10);}
  num2--;
if(num2==0)
    {
num2=100;
    }
  }
display(num2);
if(!key4)
      {
      delay5ms(50);
      if(!key4)
      return;
      }
}
}

void init()
{
P3=0xff;  
    TMOD=0x21 ;
    TH0=(65536-922)/256 ;//1ms延时常数
    TL0=(65536-922)%256 ;//频率调节
    TH1=PWM ;            //脉宽调节
    TL1=0 ;
    EA=1;
    ET0=1;
    ET1=1;
    TR0=1 ;
}

/*********************************************************/
// 定时器0中断服务程序.
/*********************************************************/
void timer0() interrupt 1  
{   
    TR1=0 ;
    TH0=(65536-922)/256 ;
    TL0=(65536-922)%256 ;
    TH1=PWM ;
    TR1=1 ;
    P3=0x00 ;      //启动输出
}
/*********************************************************/
// 定时器1中断服务程序
/*********************************************************/
void timer1() interrupt 3  
{  
    TR1=0 ;
    P3=0xff ;     //结束输出
}
/*********************************************************/
//蜂鸣器子程序
/*********************************************************/
void Beep()      
  {
      unsigned char i  ;
      for (i=0  ;i<100  ;i++)
        {
          delay(250)  ;
          BEEP=!BEEP  ;                //Beep取反
        }  
     BEEP=1  ;                            //关闭蜂鸣器
     delayms(250);
  }  

void delay5ms(uchar a)
{
uint b,c;
for(b=a;b>0;b--)
for(c=200;c>0;c--);
}

/*********************************************************/
// 延时子程序
/*********************************************************/   
void delay(unsigned char t)
{  
    while(t--)   ;
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)  
{
    unsigned char i ;
    while(ms--)
     {
        for(i = 0 ; i < 120; i++) ;
     }
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

220

帖子

0

粉丝