黄金会员 
 
主题
回帖0
积分9861
阅读权限40
注册时间2009-11-11
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
 
 本帖最后由 WOSS1001 于 2011-12-7 20:19 编辑  
 
首先感谢坛上的考拉等各位朋友。断断续续学了几个月的C语言,总体感觉C比汇编强大,但写出来的程序比汇编的臃肿。 
这个是我做的第一个用C编程的实物。相机不在身边照片发不了。程序写的也乱,大家就当看个热闹吧。压缩文件中有仿真和源程序。
 
2HC5958x8.rar
(78.47 KB, 下载次数: 591)
 
 
DS1302.C是STC的 
#include<reg52.h> 
#include"ds1302.c" 
#define un8 unsigned char 
#define un16  unsigned int 
#define row P0    //行 
sbit Press_key = P1^0;//按键的I/O  
sbit Press_key1 = P1^1; 
sbit Press_key2 = P1^2; 
sbit st = P3^2; //595第12脚(正脉冲更新输出内容) 
//sbit oe_h=P3^4; 
//sbit oe_m=P3^5; 
un8 bdata Control_Port;     // 声明一个可位寻址的字节变量 
sbit     new_value = Control_Port^1;   // 引用该字节变量的某一位 
sbit     old_value = Control_Port^2; 
sbit     new_value1 = Control_Port^3;   // 引用该字节变量的某一位 
sbit     old_value1 = Control_Port^4; 
sbit     new_value2 = Control_Port^5;   // 引用该字节变量的某一位 
sbit     old_value2 = Control_Port^6; 
sbit     ds= Control_Port^7; 
code un8 tab[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};  //行扫描 
//code un8 tab[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};  //行扫描 
un8 code tab1[]={0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60, //0-9 
                 0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x20, 
     0x60,0x90,0x10,0x20,0x40,0x80,0x80,0xf0, 
     0x60,0x90,0x10,0x20,0x10,0x10,0x90,0x60, 
     0x20,0x20,0x40,0x90,0x90,0xf0,0x10,0x10, 
     0xf0,0x80,0x80,0xe0,0x10,0x10,0x90,0x60, 
     0x60,0x90,0x80,0xe0,0x90,0x90,0x90,0x60, 
     0xf0,0x90,0x10,0x20,0x40,0x40,0x40,0x40, 
     0x60,0x90,0x90,0x60,0x90,0x90,0x90,0x60, 
     0x60,0x90,0x90,0x90,0x70,0x10,0x90,0x60 
                 }; 
un8 code tab2[]={0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00}; 
void delay(un8 xms); 
un8 adj; 
 
main() 
{ 
   un8 x,place1,place2,place3,y,z,temp1,temp2;//place位置 从右到左place1,place2,place3,place4 
      EA=1; 
   ET0=1; 
   TMOD|=0X01; 
   TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; 
   SCON=0X00;  //工作方式0 
   ES=0;         //禁止串行中断 
  DS1302_Initial(); 
  while(1) 
     { 
         
   for(y=8;y>0;y--) 
    { 
      z=10;   
      while(z--) 
      { 
       DS1302_GetTime(now);// 读取当前时间 
     for(x=0;x<8;x++) 
      { 
      if(1==ds&1==adj){ds=0;DS1302_WriteData(0x8e, 0x00);DS1302_WriteData(0x82, HEX2BCD(minute));DS1302_WriteData(0x8e, 0x80);} //分写入 
       if(1==ds&2==adj){ds=0;DS1302_WriteData(0x8e, 0x00);DS1302_WriteData(0x84, HEX2BCD(hour));DS1302_WriteData(0x8e, 0x80);}//时写入 
      minute = BCD2HEX(now[1]); 
      hour  = BCD2HEX(now[2]); 
         row = tab[x];         //行 
                      
      if(hour<10){place2=0x00;} 
      else{place2=tab1[8*(hour/10)+x];} 
       place1=tab1[8*(hour%10)+x]; 
      if(1==adj){SBUF=0x00;} 
      else{SBUF=(place1>>4|place2)>>y;} 
     
                     while(!TI); 
      TI=0; 
          st=1;  //更新显示 
          st=0; 
       delay(10); 
          
      SBUF=0x00;  //防残影 
               while(!TI); 
      TI=0; 
          st=1;   
          st=0; 
     } 
    } 
   }   
   //////////////////// 
   for(y=0;y<25;y++) 
    { 
      z=10;    //调走动速度 
      while(z--) 
      { 
        DS1302_GetTime(now); 
       
     for(x=0;x<8;x++) 
      { 
                 
       if(1==ds&1==adj){ds=0;DS1302_WriteData(0x8e, 0x00);DS1302_WriteData(0x82, HEX2BCD(minute));DS1302_WriteData(0x8e, 0x80);} 
       if(1==ds&2==adj){ds=0;DS1302_WriteData(0x8e, 0x00);DS1302_WriteData(0x84, HEX2BCD(hour));DS1302_WriteData(0x8e, 0x80);} 
      minute = BCD2HEX(now[1]); 
      hour  = BCD2HEX(now[2]); 
       
      row = tab[x];               //行 
                   
      if(y<5) 
      { 
          place3=tab2[x]>>(7-y); 
       if(hour<10){place2=0x00;} 
       else{place2=tab1[8*(hour/10)+x];} 
           place1=tab1[8*(hour%10)+x]; 
       if(1==adj){temp1=0x00;} 
       else{temp1=(place1>>4|place2)<<y;} 
             SBUF=temp1|place3;  
      } 
         else 
      { 
       if(y<8) 
                            { 
        place3=tab2[x]>>(7-y); 
           if(hour<10){place2=0x00;} 
           else{place2=tab1[8*(hour/10)+x];} 
        place1=tab1[8*(hour%10)+x]; 
        if(1==adj){temp1=0x00;} 
           else{temp1=(place1>>4|place2)<<y;} 
              temp1|=place3; 
               
           place2=tab1[8*(minute/10)+x]; 
               place1=tab1[8*(minute%10)+x]; 
        if(2==adj){temp2=0x00;} 
        else{temp2=(place1>>4|place2)>>(12-y);}   
        SBUF=temp1|temp2; 
       } 
       else 
       { 
        if(y<13) 
        { 
         place3=tab2[x]<<(y-7); 
          
         place2=tab1[8*(minute/10)+x]; 
                   place1=tab1[8*(minute%10)+x]; 
         if(2==adj){temp2=0x00;} 
         else{temp2=(place1>>4|place2)>>(12-y);}   
            SBUF=temp2|place3;   
        } 
        else 
        { 
         place2=tab1[8*(minute/10)+x]; 
                   place1=tab1[8*(minute%10)+x]; 
         if(2==adj){SBUF=0x00;} 
         else{SBUF=(place1>>4|place2)<<(y-12);} 
        } 
       } 
          } 
       while(!TI); 
       TI=0; 
           st=1;  //更新显示 
           st=0; 
        delay(10); 
       
       SBUF=0x00;  //防残影 
                while(!TI); 
          TI=0; 
           st=1;  //更新显示 
           st=0; 
      } 
       } 
      } 
  } 
} 
void delay(un8 xms) 
{ 
  un8 i,j; 
  for(i=xms;i>0;i--) 
     for(j=120;j>0;j--); 
} 
void Timer0_interrupt() interrupt 1 using 2  
{  
  TH0=(65536-50000)/256; 
  TL0=(65536-50000)%256; 
  new_value =Press_key;  
     if(!new_value && old_value)//识别按键。(按下即有效)  
  {  
          ds=1; 
    switch(adj) 
    { 
     case 0x01:  minute++;if(60==minute){minute=0;}break;  
     case 0x02:  hour++;if(60==hour){hour=0;};break;     
     default:  break; 
    } 
  }  
     old_value = new_value;  
 
       new_value1 =Press_key1;  
     if(!new_value1 && old_value1)//识别按键。  
  {  
          ds=1; 
    switch(adj) 
    { 
     case 0x01:  minute--;if(255==minute){minute=59;};break;  
     case 0x02:  hour--;if(255==hour){hour=23;};break;     
     default:  break; 
    }            
  }  
     old_value1 = new_value1;  
   new_value2 =Press_key2;  
     if(!new_value2 && old_value2)//识别按键。  
  {  
          adj++; 
          if(3==adj) 
    { 
       adj=0; 
   }                   
  }  
     old_value2 = new_value2;  
} |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |