⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wannianli.lst

📁 0107、32x8 LED点阵屏电子钟设计制作资料
💻 LST
📖 第 1 页 / 共 2 页
字号:
 159   1              dd=clock_in();
 160   1              clock_Rst=0;
 161   1              clock_clk=1;
 162   1              return(dd);
 163   1      }
 164          //---------------------------------------常用时钟数据读取
 165          void read_clockS(void){
 166   1              mm = read_clock(0x83);//读取分钟数据
 167   1              hh = read_clock(0x85);//小时
 168   1              dd = read_clock(0x87);//日
 169   1              mo = read_clock(0x89);//月
 170   1              xq = read_clock(0x8b);//星期
 171   1              yy = read_clock(0x8d);//年
 172   1      }
 173          //*---------------------------------------DS1302写数据(底层协议)
 174          void write_clock(uchar ord, uchar dd){
 175   1              clock_clk=0;
 176   1              clock_Rst=0;
 177   1              clock_Rst=1;
 178   1              clock_out(ord);
 179   1              clock_out(dd);
C51 COMPILER V7.50   WANNIANLI                                                             01/09/2006 22:13:53 PAGE 4   

 180   1              clock_Rst=0;
 181   1              clock_clk=1;
 182   1      }
 183          //--------------------------------------------------调时用加1程序
 184          void Set_time(unsigned char sel){ //根据选择调整的相应项目加1并写入DS1302
 185   1        signed char address,item;
 186   1        signed char max,mini;
 187   1        if(sel==7)  {address=0x80; max=0;mini=0;}     //秒7
 188   1        if(sel==6)  {address=0x82; max=59;mini=0;}    //分钟6
 189   1        if(sel==5)  {address=0x84; max=23;mini=0;}    //小时5
 190   1        if(sel==3)  {address=0x86; max=31;mini=1;}    //日3
 191   1        if(sel==2)  {address=0x88; max=12;mini=1;}    //月2
 192   1        if(sel==1)  {address=0x8c; max=99; mini=0;}    //年1
 193   1        if(sel==4)  {address=0x8a; max=7;mini=1;}    //星期4  
 194   1        //读取1302某地址上的数值转换成10进制赋给item 
 195   1        item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
 196   1              item++;//数值加1  
 197   1        if(item>max) item=mini;//查看数值有效范围   
 198   1        if(item<mini) item=max;           
 199   1        write_clock(0x8e,0x00);//允许写操作
 200   1        write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
 201   1        write_clock(0x8e,0x80);//写保护,禁止写操作  
 202   1      }
 203          //--------------------------------------------设置1302的初始时间
 204          void Init_1302(void){//(2005年12月20日12时00分00秒星期二)
 205   1              write_clock(0x8e,0x00);//允许写操作
 206   1              write_clock(0x8c,0x05);//年
 207   1              write_clock(0x8a,0x02);//星期
 208   1              write_clock(0x88,0x12);//月
 209   1              write_clock(0x86,0x20);//日
 210   1              write_clock(0x84,0x12);//小时
 211   1              write_clock(0x82,0x00);//分钟
 212   1              write_clock(0x80,0x00);//秒
 213   1              write_clock(0x90,0xa5);//充电   
 214   1              write_clock(0x8e,0x80);//禁止写操作
 215   1      }
 216          //--------------------------------------------扬声器--整点报时
 217          void Beep(void){//BELL 
 218   1              uchar a;//定义变量用于发声的长度设置
 219   1              Led_EA = 1;//关列显示驱动,防止屏幕出现乱码
 220   1              for(a=60;a>0;a--){//第一个声音的长度
 221   2                      Bell_Out = ~Bell_Out;//取反扬声器驱动口,以产生音频
 222   2                      Delay(100);//音调设置延时
 223   2              }
 224   1              for(a=100;a>0;a--){//同上
 225   2                      Bell_Out = ~Bell_Out;
 226   2                      Delay(80);//
 227   2              }
 228   1              for(a=100;a>0;a--){//同上
 229   2                      Bell_Out = ~Bell_Out;
 230   2                      Delay(30);//
 231   2              }
 232   1      }
 233          //--------------------------------------------扬声器--设置报警
 234          void Beep_set(void){//BELL 
 235   1              uchar a;//定义变量用于发声的长度设置
 236   1              Led_EA = 1;//关列显示驱动,防止屏幕出现乱码
 237   1              for(a=250;a>0;a--){//第一个声音的长度
 238   2                      Bell_Out = ~Bell_Out;//取反扬声器驱动口,以产生音频
 239   2                      Delay(20);//音调设置延时
 240   2              }
 241   1              for(a=100;a>0;a--){//同上
C51 COMPILER V7.50   WANNIANLI                                                             01/09/2006 22:13:53 PAGE 5   

 242   2                      Bell_Out = ~Bell_Out;
 243   2                      Delay(80);//
 244   2              }
 245   1      }       
 246          //----------------------------------------扬声器--按键音
 247          void Beep_key(void){
 248   1              uchar a;//定义变量用于发声的长度设置
 249   1              Led_EA = 1;//关列显示驱动,防止屏幕出现乱码
 250   1              for(a=100;a>0;a--){//声音的长度
 251   2                      Bell_Out = ~Bell_Out;
 252   2                      Delay(50);//音调设置延时
 253   2              }
 254   1      }
 255          //----------------------------------------32个寄存器清空(0x00)
 256          void clearRAM (void){//寄存器清空函数
 257   1              uchar a;//定义变量用于清空数据指针
 258   1              for(a=0;a<32;a++){//指向32个寄存器
 259   2                      Ledplay[a] = 0;//将指向的寄存器清空
 260   2              }
 261   1      }
 262          //----------------------------------------将字符装入显示寄存器
 263          void putin (uchar u){//字符载入函数
 264   1              uchar a = 0;//定义变量用于数据提取指针
 265   1              do{             
 266   2                      Ledplay[bn] = no[u][a];//将二维数组中的一组数据放入显示缓冲区
 267   2                      a++;//换下一个提取字节  
 268   2                      bn++;//换下一个显示缓冲字节                     
 269   2              }
 270   1              while(no[u][a] != 0);//当显示数据为0时结束循环
 271   1              bn++;//换下一个显示缓冲字节
 272   1              Ledplay[bn] = 0;//显示一列的空位,便于字符区分  
 273   1      }
 274          //------------------------------------调时切换
 275          void setput (uchar k){
 276   1              switch(k){//K为0调整日期,K为1调整时间,K为2调整年和星期
 277   2                      case 0:{
 278   3                              read_clockS();//调用时钟芯片驱动函数,读出时钟数据并放入相应的寄存器
 279   3                              clearRAM();//清空显示缓冲区数据
 280   3                              bn = 0;//显示位累加寄存器清零(从头开始写入显示缓冲区)
 281   3                              if(mo/16 != 0){
 282   4                                      putin(mo/16);//显示月值(十位,为0时消隐)
 283   4                              }
 284   3                              putin(mo%16);//显示月值(个位)
 285   3                              putin(21);//显示横杠“月”
 286   3                              if(dd/16 != 0){
 287   4                                      putin(dd/16);//显示日值(十位,为0时消隐)
 288   4                              }
 289   3                              putin(dd%16);//显示日值(个位)
 290   3                              putin(22);//显示“日”
 291   3                      }break; 
 292   2                      case 1:{
 293   3                              read_clockS();//调用时钟芯片驱动函数,读出时钟数据并放入相应的寄存器
 294   3                              clearRAM();//清空显示缓冲区数据
 295   3                              bn = 0;//显示位累加寄存器清零(从头开始写入显示缓冲区)
 296   3                              //if(hh/16 != 0){
 297   3                                      putin(hh/16);//显示小时值(十位,为0时消隐)
 298   3                              //}
 299   3                              putin(hh%16);//显示小时值(个位)
 300   3                              putin(17);//显示冒号“:”
 301   3                              putin(mm/16);//显示分钟值(十位)
 302   3                              putin(mm%16);//显示分钟值(个位)
 303   3                      }break; 
C51 COMPILER V7.50   WANNIANLI                                                             01/09/2006 22:13:53 PAGE 6   

 304   2                      case 2:{
 305   3                              read_clockS();//调用时钟芯片驱动函数,读出时钟数据并放入相应的寄存器
 306   3                              clearRAM();//清空显示缓冲区数据
 307   3                              bn = 0;//显示位累加寄存器清零(从头开始写入显示缓冲区)
 308   3                              putin(yy/16);//显示年(十位)
 309   3                              putin(yy%16);//显示年(个位)
 310   3                              putin(20);//显示“Y”表示年
 311   3                              putin(xq+9);//显示星期数据
 312   3                      }break;
 313   2                      default:{//数据不附时退出
 314   3                      }
 315   2              }
 316   1              Beep_key();//按键音
 317   1      }
 318          //----------------------------------------32*8点阵显示驱动
 319          void display (void){//点阵屏驱动函数
 320   1              uchar ac,aa=7;//定义两个数据变量
 321   1              for(ac=0x28;ac<0x30;ac++){//扫描后两块LED屏(由于P1.5接扬声器所以高4位为2,旨在关声音)         
 322   2                      Led_E  = ac;//用ac值驱动使能列信号              
 323   2                      Led_24 = DL(Ledplay[aa+8]);//将显示寄存器数据写入2、4屏(嵌入DL汇编是为了翻转字节数据,如果接线正确可省

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -