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

📄 51

📁 51单片机大量源码
💻
📖 第 1 页 / 共 2 页
字号:
 185          函数功能:将数据(字符的标准ASCII码)写入液晶模块
 186          入口参数:y(为字符常量)
 187          ***************************************************/
 188           void WriteData(unsigned char y)
 189           {
 190   1          while(BusyTest()==1);  
 191   1                RS=1;           //RS为高电平,RW为低电平时,可以写入数据
 192   1                RW=0;
 193   1                E=0;            //E置低电平(根据表8-6,写指令时,E为高脉冲,
 194   1                           // 就是让E从0到1发生正跳变,所以应先置"0"
 195   1                P0=y;           //将数据送入P0口,即将数据写入液晶模块
 196   1                _nop_();
 197   1                _nop_();
 198   1                _nop_();
 199   1           _nop_();       //空操作四个机器周期,给硬件反应时间
 200   1                E=1;           //E置高电平
 201   1                _nop_();
 202   1                _nop_();
 203   1                _nop_();
 204   1               _nop_();        //空操作四个机器周期,给硬件反应时间
 205   1               E=0;            //当E由高电平跳变成低电平时,液晶模块开始执行命令
 206   1       }
 207          /*****************************************************
 208          函数功能:对LCD的显示模式进行初始化设置
 209          ***************************************************/
 210          void LcdInitiate(void)
 211          {
 212   1          delaynms(15);               //延时15ms,首次写指令时应给LCD一段较长的反应时间
 213   1          WriteInstruction(0x38);     //显示模式设置:16×2显示,5×7点阵,8位数据接口
 214   1              delaynms(5);                //延时5ms ,给硬件一点反应时间
 215   1          WriteInstruction(0x38);
 216   1              delaynms(5);               //延时5ms ,给硬件一点反应时间
 217   1              WriteInstruction(0x38);     //连续三次,确保初始化成功
 218   1              delaynms(5);               //延时5ms ,给硬件一点反应时间
 219   1              WriteInstruction(0x0c);     //显示模式设置:显示开,无光标,光标不闪烁
 220   1              delaynms(5);               //延时5ms ,给硬件一点反应时间
 221   1              WriteInstruction(0x06);     //显示模式设置:光标右移,字符不移
 222   1              delaynms(5);                //延时5ms ,给硬件一点反应时间
 223   1              WriteInstruction(0x01);     //清屏幕指令,将以前的显示内容清除
 224   1              delaynms(5);             //延时5ms ,给硬件一点反应时间
 225   1      
 226   1       }
 227          /**************************************************************
 228          以下是1302数据的显示程序
 229          **************************************************************/
 230          /*****************************************************
 231          函数功能:显示秒
 232          入口参数:x
 233          ***************************************************/ 
 234          void DisplaySecond(unsigned char x)
 235          {
 236   1       unsigned char i,j;     //j,k,l分别储存温度的百位、十位和个位
 237   1              i=x/10;//取十位
 238   1              j=x%10;//取个位     
 239   1              WriteAddress(0x49);    //写显示地址,将在第2行第7列开始显示
 240   1              WriteData(digit[i]);    //将百位数字的字符常量写入LCD
 241   1              WriteData(digit[j]);    //将十位数字的字符常量写入LCD
C51 COMPILER V8.18   EX98                                                                  01/04/2010 16:37:15 PAGE 5   

 242   1              delaynms(50);         //延时1ms给硬件一点反应时间    
 243   1       }
 244          
 245          /*****************************************************
 246          函数功能:显示分钟
 247          入口参数:x
 248          ***************************************************/ 
 249          void DisplayMinute(unsigned char x)
 250          {
 251   1       unsigned char i,j;     //j,k,l分别储存温度的百位、十位和个位
 252   1              i=x/10;//取十位
 253   1              j=x%10;//取个位     
 254   1              WriteAddress(0x46);    //写显示地址,将在第2行第7列开始显示
 255   1              WriteData(digit[i]);    //将百位数字的字符常量写入LCD
 256   1              WriteData(digit[j]);    //将十位数字的字符常量写入LCD
 257   1              delaynms(50);         //延时1ms给硬件一点反应时间    
 258   1       }
 259          /*****************************************************
 260          函数功能:显示小时
 261          入口参数:x
 262          ***************************************************/ 
 263          void DisplayHour(unsigned char x)
 264          {
 265   1       unsigned char i,j;     //j,k,l分别储存温度的百位、十位和个位
 266   1              i=x/10;//取十位
 267   1              j=x%10;//取个位     
 268   1              WriteAddress(0x43);    //写显示地址,将在第2行第7列开始显示
 269   1              WriteData(digit[i]);    //将百位数字的字符常量写入LCD
 270   1              WriteData(digit[j]);    //将十位数字的字符常量写入LCD
 271   1              delaynms(50);         //延时1ms给硬件一点反应时间    
 272   1       }
 273           /*****************************************************
 274          函数功能:显示日
 275          入口参数:x
 276          ***************************************************/ 
 277          void DisplayDay(unsigned char x)
 278          {
 279   1       unsigned char i,j;     //j,k,l分别储存温度的百位、十位和个位
 280   1              i=x/10;//取十位
 281   1              j=x%10;//取个位     
 282   1              WriteAddress(0x0c);    //写显示地址,将在第2行第7列开始显示
 283   1              WriteData(digit[i]);    //将百位数字的字符常量写入LCD
 284   1              WriteData(digit[j]);    //将十位数字的字符常量写入LCD
 285   1              delaynms(50);         //延时1ms给硬件一点反应时间    
 286   1       }
 287           /*****************************************************
 288          函数功能:显示月
 289          入口参数:x
 290          ***************************************************/ 
 291          void DisplayMonth(unsigned char x)
 292          {
 293   1       unsigned char i,j;     //j,k,l分别储存温度的百位、十位和个位
 294   1              i=x/10;//取十位
 295   1              j=x%10;//取个位     
 296   1              WriteAddress(0x09);    //写显示地址,将在第2行第7列开始显示
 297   1              WriteData(digit[i]);    //将百位数字的字符常量写入LCD
 298   1              WriteData(digit[j]);    //将十位数字的字符常量写入LCD
 299   1              delaynms(50);         //延时1ms给硬件一点反应时间    
 300   1       }
 301          /*****************************************************
 302          函数功能:显示年
 303          入口参数:x
C51 COMPILER V8.18   EX98                                                                  01/04/2010 16:37:15 PAGE 6   

 304          ***************************************************/ 
 305          void DisplayYear(unsigned char x)
 306          {
 307   1       unsigned char i,j;     //j,k,l分别储存温度的百位、十位和个位
 308   1              i=x/10;//取十位
 309   1              j=x%10;//取个位     
 310   1              WriteAddress(0x06);    //写显示地址,将在第2行第7列开始显示
 311   1              WriteData(digit[i]);    //将百位数字的字符常量写入LCD
 312   1              WriteData(digit[j]);    //将十位数字的字符常量写入LCD
 313   1              delaynms(50);         //延时1ms给硬件一点反应时间    
 314   1       }
 315          
 316          /*****************************************************
 317          函数功能:主函数
 318          ***************************************************/ 
 319          void main(void)
 320          {
 321   1        unsigned char second,minute,hour,day,month,year;      //分别储存苗、分、小时,日,月,年
 322   1        unsigned char ReadValue;   //储存从1302读取的数据
 323   1        LcdInitiate();             //将液晶初始化
 324   1        WriteAddress(0x01);  //写Date的显示地址,将在第1行第2列开始显示
 325   1        WriteData('D');      //将字符常量写入LCD
 326   1        WriteData('a');      //将字符常量写入LCD
 327   1        WriteData('t');      //将字符常量写入LCD
 328   1        WriteData('e');      //将字符常量写入LCD
 329   1        WriteData(':');      //将字符常量写入LCD
 330   1        WriteAddress(0x08);  //写年月分隔符的显示地址, 显示在第1行第9列
 331   1        WriteData('-');      //将字符常量写入LCD
 332   1        WriteAddress(0x0b);  //写月日分隔符的显示地址, 显示在第1行第12列
 333   1        WriteData('-');      //将字符常量写入LCD
 334   1        WriteAddress(0x45);  //写小时与分钟分隔符的显示地址, 显示在第2行第6列
 335   1        WriteData(':');      //将字符常量写入LCD
 336   1        WriteAddress(0x48);  //写分钟与秒分隔符的显示地址, 显示在第2行第9列
 337   1        WriteData(':');      //将字符常量写入LCD
 338   1        Init_DS1302();       //将1302初始化   
 339   1        while(1)
 340   1          {
 341   2                ReadValue = ReadSet1302(0x81);   //从秒寄存器读数据
 342   2           second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);//将读出数据转化
 343   2                DisplaySecond(second);          //显示秒
 344   2                ReadValue = ReadSet1302(0x83);  //从分寄存器读
 345   2           minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
 346   2                DisplayMinute(minute);               //显示分
 347   2           ReadValue = ReadSet1302(0x85);  //从分寄存器读
 348   2           hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
 349   2                DisplayHour(hour);                 //显示小时
 350   2           ReadValue = ReadSet1302(0x87);  //从分寄存器读
 351   2           day=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
 352   2                DisplayDay(day);                //显示日
 353   2                ReadValue = ReadSet1302(0x89);  //从分寄存器读
 354   2           month=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
 355   2                DisplayMonth(month);            //显示月
 356   2                ReadValue = ReadSet1302(0x8d);  //从分寄存器读
 357   2           year=((ReadValue&0xf0)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
 358   2                DisplayYear(year);              //显示年
 359   2               }
 360   1      }
 361          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    775    ----
C51 COMPILER V8.18   EX98                                                                  01/04/2010 16:37:15 PAGE 7   

   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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