测试时钟显示程序通过, 点阵显示 碰到一些困难 发现调试比写代码更纠结。代码没错 烧到板子里就是打不到想要的现象



//这个代码包含时钟和点阵 部分主函数代码未附上 需要自己添加睡觉
#include<reg52.h>
#include<intrins.h>
#define dataPort  P0
//sbit latch1=P2^0;   //ds
//sbit latch2=P2^1;   //ws

sbit LATCH=P1^0;
sbit SRCLK=P1^1;
sbit SER= P1^2;

sbit LATCH1=P2^2;
sbit SRCLK1=P2^1;
sbit SER1= P2^0;

//sbit keyPort1=P1^0;
//sbit keyPort2=P1^1;
unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char code seg[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char code tab[]={0x00,0x6c,0x92,0x82,0x44,0x28,0x10,0x00};
unsigned int TempData[8];

//sbit Speak=P3^0;
unsigned int count=0;
unsigned int h,m,s;
void Display(unsigned int firstBit ,unsigned int num);
  
void init_timer0(void)
{
 TMOD |=0X01;
 EA=1;
 ET0=1;
 TR0=1;
}

void sendByte(unsigned char dat) 
 {
  unsigned char i;
 for(i=0;i<8;i++)
   {
    SRCLK=0;
    SER=dat&0x80;
    dat<<=1;
    SRCLK=1;
   }

 }
 //·¢ËÍË«×Ö½Ú³ÌÐò
 void sendByte2(unsigned char dat1,unsigned char dat2)
 {
  sendByte(dat1);
  sendByte(dat2);
  

 }
void out595(void)
 {
 LATCH=0;
 _nop_();
 LATCH=1; 
  

}
//·¢ËÍλÂë×Ö½Ú
void sendSeg(unsigned char dat)
{
  unsigned char i;
  for(i=0;i<8;i++)
 {
  SRCLK1=0;
  SER1=dat&0x80; /
  dat<<=1;
  SRCLK1=1;
   
  }
    LATCH1=0;
   _nop_();
    LATCH1=1;
}
void main()
 {
  while(1)
  {
   unsigned char i,j;
    for(i=0;i<8;i++) //
   { 
    sendSeg(seg[i]);   //
    
    sendByte2(0x00,0xff);  //
    out595();
    
    for(j=0;j<1000;j++);
    
    sendByte2(0xff,0xff);
    out595();
   }
 }
}
/*
void Display(unsigned int firstBit ,unsigned int num)
{
 
 unsigned int i,j;
 for(i=firstBit;i<num;i++)
 {
  P0=dofly_WeiMa[i];
  latch1=1;
  latch1=0;
 
  P0=TempData[i];
  latch2=1;
   latch2=0;
   for(j=0;j<1000;j++); // 1ms
 }

}
void timer0(void) interrupt 1
{
 static int sum=0;
 TH0=(65536-2000)/256;
 TL0=(65536-2000)%256; 
        //2ms ɨÃè
   sum++;
   if(500==sum)
   {
     sum=0;
      s++;
       if(60==s)
     {
       s=0;
      m++;
        if(60==m)
       {
        m=0;
        h++;
           if(24==h)
          {
           h=0;
          }
       }
     }
    }
}
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值