久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9573|回復: 13
收起左側

用pcf8563做時鐘有代碼protues仿真 親測可以用

  [復制鏈接]
ID:193381 發表于 2017-4-25 13:25 | 顯示全部樓層 |閱讀模式
親測可以用,Proteus7.8打開
51hei.png
0.png

51單片機源程序:
  1. //---庫函數聲明及相關定義---//
  2. #include <reg52.h>
  3. #include <intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit SDA=P3^1; //數據
  7. sbit SCL=P3^0; //時鐘

  8. #define     LCDIO      P1  //1602數據口
  9. sbit rs=P2^0;  //1602數據命令選擇引腳
  10. sbit rd=P2^1;        //讀寫選擇抖?
  11. sbit lcden=P2^2;        //1602選通引腳

  12. uchar code table[]={" 2010-11-29 MON"};
  13. uchar code table1[]={" 15:45:00       "};
  14. uchar code table2[]= "SUNMONTUEWESTHUFRISAT";

  15. uchar g8563_Store[8]; /*時間交換區,全局變量聲明*/
  16. uchar code c8563_Store[8]={0x50,0x59,0x23,0x31,0x05,0x07,0x88,0x20}; /*寫入時間初值:世紀,08年 7月 星期一 13日 07:59:00*/

  17. sbit menu=P0^0;//菜單
  18. sbit add=P0^1;//加一
  19. sbit dec=P0^2;//減一

  20. uchar second,minute,hour,day,month,year,week,count=0;  


  21. void delay1602(uint z)
  22. {
  23.         uint x,y;
  24.         for(x=z;x>0;x--)
  25.         for(y=110;y>0;y--);
  26. }
  27. void write_com(uchar com)//1602寫命令子程序
  28. {
  29.         rs=0;//RS是數據命令選擇短,高電平寫數據,低電平寫命令
  30.         rd=0;//RD是讀寫選擇短,高電平讀,低電平寫
  31.         lcden=0;//1602選通端,高電平選通,低電平禁止
  32.         P1=com;
  33.         delay1602(5);
  34.         lcden=1;
  35.         delay1602(5);
  36.         lcden=0;        
  37. }

  38. void write_date(uchar date)//1602寫數據子程序
  39. {
  40.         rs=1;        //RS是數據命令選擇短,高電平寫數據,低電平寫命令
  41.         rd=0;        //RD是讀寫選擇短,高電平讀,低電平寫
  42.         lcden=0;        //1602選通端,高電平選通,低電平禁止
  43.         P1=date;
  44.         delay1602(5);
  45.         lcden=1;
  46.         delay1602(5);
  47.         lcden=0;        
  48. }

  49. void init()
  50. {
  51.         uchar num;
  52.         lcden=0;
  53.         write_com(0x38);        //0011 1000B,功能模式設置,設置為8為數據口,兩行顯示,5*7點陣
  54.         write_com(0x0c);        //0000 1011B,顯示開及光標設置,關顯示,顯示光標,光標閃爍
  55.         write_com(0x06);        //0000 0110B,顯示光標移動設置,讀或寫一個字符,地址指針減一且光標減一,寫一個字符屏幕顯示不移動
  56.         write_com(0x01);        //0000 0001B,顯示清屏,數據指針和所有顯示清屏
  57.         write_com(0x80);        //1000 000B,關閉顯示
  58.         delay1602(5);
  59.         write_com(0x80);        //1000 000B,設置為2行顯示,寫入第一行字符的地址,第一行地址是00-2F
  60.         for(num=0;num<15;num++)
  61.         {
  62.                 write_date(table[num]);        //寫入第一行數據
  63.                 delay1602(5);
  64.         }
  65.         write_com(0x80+0x40);        //1100 0000B,設置為2行顯示,寫入第二行字符的地址,第而行地址是40-67
  66.         for(num=0;num<15;num++)        //寫入第二行數據
  67.         {
  68.                 write_date(table1[num]);//寫入第二行數據
  69.                 delay1602(5);
  70.         }
  71. }



  72. /********************************************
  73. 內部函數,延時1
  74. ********************************************/
  75. void Delay()
  76. {
  77.    // {P10=1;_nop_();P10=0;}
  78.     _nop_();
  79.    _nop_(); /*根據晶振頻率制定延時時間*/
  80. }
  81. /********************************************
  82. 內部函數,I2C開始
  83. ********************************************/
  84. void Start()
  85. {  EA=0;
  86.    SDA=1;
  87.    SCL=1;
  88.    Delay();
  89.    SDA=0;
  90.    Delay();
  91.    SCL=0;
  92. }
  93. /********************************************
  94. 內部函數,I2C結束
  95. ********************************************/
  96. void Stop()
  97. {
  98.    SDA=0;
  99.    SCL=0;
  100.    Delay();
  101.    SCL=1;
  102.    Delay();
  103.    SDA=1;
  104.    Delay();
  105.    EA=1;
  106. }
  107. /********************************************
  108. 內部函數,輸出ACK ,每個字節傳輸完成,輸出ack=0,結束讀書據,ack=1;
  109. ********************************************/
  110. void WriteACK(uchar ack)
  111. {
  112.    SDA=ack;
  113.    Delay();
  114.    SCL=1;
  115.    Delay();
  116.    SCL=0;
  117. }
  118. /********************************************
  119. 內部函數,等待ACK
  120. ********************************************/
  121. void WaitACK()
  122. {  uchar errtime=20;
  123.    SDA=1;
  124.    Delay(); /*讀ACK*/
  125.    SCL=1;
  126.    Delay();
  127.    while(SDA)
  128.    {  errtime--;
  129.       if(!errtime) Stop();
  130.    }
  131.    SCL=0;
  132.    Delay();
  133. }
  134. /********************************************
  135. 內部函數.輸出數據字節
  136. 入口:B=數據
  137. ********************************************/
  138. void writebyte(uchar wdata)
  139. {
  140.    uchar i;
  141.    for(i=0;i<8;i++)
  142.    {
  143.        if(wdata&0x80) SDA=1;
  144.        else SDA=0;
  145.        wdata<<=1;
  146.        SCL=1;
  147.        Delay();
  148.        SCL=0;
  149.    }
  150.    WaitACK();     //I2C器件或通訊出錯,將會退出I2C通訊
  151. }
  152. /********************************************
  153. 內部函數.輸入數據
  154. 出口:B
  155. ********************************************/
  156. uchar Readbyte()
  157. {
  158.    uchar i,bytedata;
  159.    SDA=1;
  160.    for(i=0;i<8;i++)
  161.    {
  162.       SCL=1;
  163.       bytedata<<=1;
  164.       bytedata|=SDA;
  165.       SCL=0;
  166.       Delay();
  167.    }
  168.    return(bytedata);
  169. }
  170. /********************************************
  171. 輸出數據->pcf8563
  172. ********************************************/
  173. void writeData(uchar address,uchar mdata)
  174. {
  175.    Start();
  176.    writebyte(0xa2); /*寫命令*/
  177.    writebyte(address); /*寫地址*/
  178.    writebyte(mdata); /*寫數據*/
  179.    Stop();
  180. }
  181. /********************************************
  182. 輸入數據<-pcf8563
  183. ********************************************/
  184. uchar ReadData(uchar address) /*單字節*/
  185. {  uchar rdata;
  186.    Start();
  187.    writebyte(0xa2); /*寫命令*/
  188.    writebyte(address); /*寫地址*/
  189.    Start();
  190.    writebyte(0xa3); /*讀命令*/
  191.    rdata=Readbyte();
  192.    WriteACK(1);
  193.    Stop();
  194.    return(rdata);
  195. }
  196. void ReadData1(uchar address,uchar count,uchar * buff) /*多字節*/
  197. {  uchar i;
  198.    Start();
  199.    writebyte(0xa2); /*寫命令*/
  200.    writebyte(address); /*寫地址*/
  201.    Start();
  202.    writebyte(0xa3); /*讀命令*/
  203.    for(i=0;i<count;i++)
  204.    {
  205.         buff[i]=Readbyte();
  206.         if(i<count-1) WriteACK(0);
  207.    }
  208.   WriteACK(1);
  209.    Stop();
  210. }
  211. /********************************************
  212. 內部函數,讀入時間到內部緩沖區
  213. ********************************************/
  214. void P8563_Read()
  215. {   uchar time[7],century;
  216.         ReadData1(0x02,0x07,time);
  217.         century=time[5];
  218.         g8563_Store[0]=time[0]&0x7f; /*秒*/
  219.         g8563_Store[1]=time[1]&0x7f; /*分*/
  220.         g8563_Store[2]=time[2]&0x3f; /*小時*/
  221.         g8563_Store[3]=time[3]&0x3f; /*日*/
  222.         g8563_Store[4]=time[4]&0x07; /*星期*/
  223.         g8563_Store[5]=time[5]&0x1f; /*月*/
  224.         g8563_Store[6]=time[6]&0xff; /*年*/
  225.         g8563_Store[7]=century&0x80; /*去世紀,00為2000,80為1900*/
  226.         if(g8563_Store[7]==0x00)g8563_Store[7]=20;
  227.         if(g8563_Store[7]==0x80)g8563_Store[7]=19;
  228. }
  229. /********************************************
  230. 讀入時間到內部緩沖區----外部調用
  231. ********************************************/
  232. void P8563_gettime()
  233. {
  234.     P8563_Read();
  235.     if(g8563_Store[0]==0)
  236.       P8563_Read(); /*如果為秒=0,為防止時間變化,再讀一次*/
  237. }
  238. /********************************************
  239. 寫時間修改值
  240. ********************************************/
  241. void P8563_settime()
  242. {

  243.         
  244.         writeData(2,g8563_Store[0]);//秒
  245.         writeData(3,g8563_Store[1]);//分
  246.         writeData(4,g8563_Store[2]);//時
  247.         writeData(5,g8563_Store[3]);//日
  248.         writeData(6,g8563_Store[4]);//星期
  249.         if(g8563_Store[7]==0x20)g8563_Store[5]=(g8563_Store[5]&0x3F);//判斷世紀
  250.         if(g8563_Store[7]==0x19)g8563_Store[5]=(g8563_Store[5]|0x80);//判斷世紀
  251.         writeData(7,g8563_Store[5]);//月
  252.         writeData(8,g8563_Store[6]);//年


  253. }
  254. /********************************************
  255. P8563的初始化
  256. ********************************************/
  257. void P8563_init()
  258. {
  259.     uchar i;
  260.     if((ReadData(0xa)&0x3f)!=0x8) /*檢查是否第一次啟動,是則初始化時間*/
  261.     {
  262.         for(i=0;i<8;i++) g8563_Store[i]=c8563_Store[i]; /*初始化時間*/
  263.                   P8563_settime();
  264.         writeData(0x0,0x00);
  265.         writeData(0xa,0x8); /*8:00報警*/
  266.         writeData(0x1,0x12); /*報警有效*/
  267.         writeData(0xd,0xf0);
  268.     }
  269. }


  270. void DisplaySecond(uchar x)        //寫入1602秒
  271. {
  272.         uchar i,j;   
  273.         i=x/10;
  274.         j=x%10;
  275.         write_com(0xc7);   //寫1602的命令字,設置秒的數據地址為47H
  276.         write_date(0x30+i); //寫入秒的低位  
  277.         write_date(0x30+j); //寫入秒的高位      
  278. }

  279. void DisplayMinute(uchar x)         //寫入1602分
  280. {
  281.         uchar i,j;   
  282.         i=x/10;
  283.         j=x%10;
  284.         write_com(0xc4);   
  285.         write_date(0x30+i);  
  286.         write_date(0x30+j);        
  287. }

  288. void DisplayHour(uchar x)         //寫入1602小時
  289. {
  290.         uchar i,j;   
  291.         i=x/10;
  292.         j=x%10;
  293.         write_com(0xc1);   
  294.         write_date(0x30+i);  
  295.         write_date(0x30+j);        
  296. }

  297. void DisplayDay(uchar x)         //寫入1602天
  298. {
  299.         uchar i,j;   
  300.         i=x/10;
  301.         j=x%10;   
  302.         write_com(0x89);   
  303.         write_date(0x30+i);  
  304.         write_date(0x30+j);      
  305. }

  306. void DisplayMonth(uchar x)         //寫入1602月
  307. {
  308.         uchar i,j;     
  309.         i=x/10;
  310.         j=x%10;  
  311.         write_com(0x86);   
  312.         write_date(0x30+i);  
  313.         write_date(0x30+j);  
  314. }

  315. void DisplayYear(uchar x)         //寫入1602年
  316. {
  317.         uchar i,j;  
  318.         i=x/10;
  319.         j=x%10;
  320.         write_com(0x83);   
  321.         write_date(0x30+i);
  322.         write_date(0x30+j);  
  323. }   

  324. void DisplayWeek(uchar x)        //寫入星期
  325. {
  326.         uchar i;
  327.         x=(x)*3;
  328.         write_com(0x8c);   
  329.         for(i=0;i<3;i++)
  330.         {
  331.                 write_date(table2[x]);
  332.                 x++;  
  333.         }
  334. }  


  335. void DisplayCentury(uchar x)         //寫入世紀
  336. {
  337.         uchar i,j;  
  338.         i=x/10;
  339.         j=x%10;
  340.         write_com(0x81);   
  341.         write_date(0x30+i);
  342.         write_date(0x30+j);  
  343. }   


  344.         

  345. //---BCD轉換16函數---//
  346. void BCD_16( )
  347. {
  348. uchar i,ucData1,ucData2;
  349.         for(i=0;i<7;i++)
  350.         {
  351.                 ucData1=g8563_Store[i]/16; //BCD碼轉十六進制
  352.                 ucData2=g8563_Store[i]%16;
  353.                 g8563_Store[i]=ucData1*10+ucData2;
  354.                 }
  355. }

  356. void display(void)
  357. {

  358.         DisplaySecond(g8563_Store[0]);           
  359.         DisplayMinute(g8563_Store[1]);        
  360.         DisplayHour(g8563_Store[2]);            
  361.         DisplayDay(g8563_Store[3]);               
  362.         DisplayMonth(g8563_Store[5]);            
  363.         DisplayYear(g8563_Store[6]);         
  364.         DisplayWeek(g8563_Store[4]);
  365.          DisplayCentury(g8563_Store[7]);


  366. }



  367. void turn_val(uchar newval,uchar flag,uchar  newaddr,uchar s1num)        
  368. //newval是時間日期值,flag是時間日期增減標識,newaddr是讀取數據的地址,s1num是年月日時分秒星期的數字標識
  369. {
  370. uchar ucData1,ucData2;
  371.         newval=ReadData(newaddr);
  372. //        century=newval;
  373.         switch(newaddr)
  374.                 {
  375.                 case 0x02:newval=(newval&0x7f); /*秒*/
  376.                 break;
  377.                 case 0x03:newval=(newval&0x7f); /*秒*/
  378.                 break;
  379.                 case 0x04:newval=(newval&0x3f);/*小時*/
  380.                 break;
  381.                 case 0x05:newval=(newval&0x3f); /*日*/
  382.                 break;
  383.                 case 0x06:newval=(newval&0x07); /*星期*/
  384.                 break;
  385.                 case 0x07:newval=(newval&0x1f);/*月*/
  386.                 break;
  387.                 case 0x08:newval=(newval&0xff);/*年*/
  388.                 }

  389.                 ucData1=newval/16; //BCD碼轉十六進制
  390.                 ucData2=newval%16;
  391.                 newval=ucData1*10+ucData2;

  392.         if(flag)                                                                  //判斷是加一還是減一
  393.         {
  394.                 newval++;
  395.                 switch(s1num)
  396.                 {
  397.                         case 1: if(newval>99) newval=0;
  398.                         DisplayYear(newval);      
  399.                         break;
  400.                         case 2: if(newval>12) newval=1;
  401.                         DisplayMonth(newval);
  402.                         break;
  403.                         case 3: if(newval>31) newval=1;
  404.                         DisplayDay(newval);  
  405.                         break;
  406.                         case 4: if(newval>6) newval=0;
  407.                         DisplayWeek(newval);
  408.                         break;
  409.                         case 5: if(newval>23) newval=0;
  410.                         DisplayHour(newval);
  411.                         break;
  412.                         case 6: if(newval>59) newval=0;
  413.                         DisplayMinute(newval);
  414.                         break;
  415.                         case 7: if(newval>59) newval=0;
  416.                         DisplaySecond(newval);
  417.                         break;
  418.                         default:break;
  419.                 }
  420.         }   
  421.         else
  422.         {
  423.                 newval--;
  424.                 switch(s1num)
  425.                 {
  426.                         case 1: if(newval==0XFF) newval=99;
  427.                         DisplayYear(newval);
  428.                         break;
  429.                         case 2: if(newval==0) newval=12;
  430.                         DisplayMonth(newval);
  431.                         break;
  432.                         case 3: if(newval==0) newval=31;
  433.                         DisplayDay(newval);
  434.                         break;
  435.                         case 4: if(newval==0xff) newval=6;
  436.                         DisplayWeek(newval);
  437.                         break;
  438.                         case 5: if(newval==0xff) newval=23;
  439.                         DisplayHour(newval);
  440.                         break;
  441.                         case 6: if(newval==0xff) newval=59;
  442.                         DisplayMinute(newval);
  443.                         break;
  444.                         case 7: if(newval==0xff) newval=59;
  445.                         DisplaySecond(newval);
  446.                         break;
  447.                         default:break;
  448.                 }
  449.         }

  450.                 ucData1=newval/10; //BCD碼轉十六進制
  451.                 ucData2=newval%10;
  452.                 newval=ucData1*16+ucData2;


  453. writeData(newaddr,newval);


  454. }   
  455. void delay(uint z)
  456. {
  457.         uint x,y;
  458.         for(x=z;x>0;x--)
  459.         for(y=110;y>0;y--);
  460. }
  461. //鍵盤掃描程序
  462. void key_scan(void)
  463. {
  464.         uchar s1num=0;                        //s1num記錄光標的位置的編號
  465.         if(menu==0)
  466.         {
  467.                 delay(5);
  468.                 if(menu==0)
  469.                 {
  470.                         while(!menu);          //menum測試到由0到1的變化,也就是按下松開的變化,s1num加1
  471.                         s1num++;
  472.                         while(1)
  473.                         {
  474.                                 if(menu==0)
  475.                                 {
  476.                                 delay(5);
  477.                                 if(menu==0)
  478.                                 {
  479.                                 while(!menu);
  480.                                 s1num++;        //menum測試到由0到1的變化,也就是按下松開的變化,s1num再加1
  481.                                 }
  482.                                 }


  483.         writeData(0x0,0x20);;//停止計時,開始相關設置。



  484.                                 write_com(0x0f);//光標閃射,0X0F是1602的命令字,顯示開,光標開,光標閃爍
  485.                         
  486.                                 if(s1num==1)
  487.                                 {
  488.                                         year=ReadData(0x08);        //讀取年的數據。         
  489.                                         write_com(0x80+4);        //年光標,0X80+地址碼,設置數據地址指針
  490.                                         if(add==0)
  491.                                         {
  492.                                                 delay(3);
  493.                                                 if(add==0)
  494.                                                 {
  495.                                                 while(!add);
  496.                                                 turn_val(year,1,0x08,1);               
  497.                                                 }
  498.                                         }
  499.                                         if(dec==0)
  500.                                         {
  501.                                                 delay(3);
  502.                                                 if(dec==0)
  503.                                                 {
  504.                                                 while(!dec);
  505.                                                 turn_val(year,0,0x08,1);//讀取當前年值,根據減小年值,并寫入1302                              
  506.                                                 }
  507.                                         }
  508.                                 }
  509.                         
  510.                                 if(s1num==2)
  511.                                 {
  512.                                         month=ReadData(0x07);
  513.                                         write_com(0x80+7);        //月光標
  514.                                         if(add==0)
  515.                                         {
  516.                                                 delay(3);
  517.                                                 if(add==0)
  518.                                                 {
  519.                                                         while(!add);
  520.                                                         turn_val(month,1,0x07,2);
  521.                                                 }
  522.                                         }
  523.                                         if(dec==0)
  524.                                         {
  525.                                                 delay(3);
  526.                                                 if(dec==0)
  527.                                                 {
  528.                                                         while(!dec);
  529.                                                         turn_val(month,0,0x07,2);
  530.                                                 }
  531.                                         }
  532.                                 }
  533.                         
  534.                                 if(s1num==3)
  535.                                 {
  536.                                         day=ReadData(0x05);
  537.                                         write_com(0x80+10);//日光標
  538.                                         if(add==0)
  539.                                         {
  540.                                                 delay(3);
  541.                                                 if(add==0)
  542.                                                 {
  543.                                                         while(!add);
  544.                                                         turn_val(day,1,0x05,3);
  545.                                                 }
  546.                                         }
  547.                                         if(dec==0)
  548.                                         {
  549.                                                 delay(3);
  550.                                                 if(dec==0)
  551.                                                 {
  552.                                                         while(!dec);
  553.                                                         turn_val(day,0,0x05,3);        //寫入日寄存器
  554.                                                 }
  555.                                         }
  556.                                 }
  557.                                 
  558.                                 if(s1num==4)
  559.                                 {
  560.                                         week=ReadData(0x06);
  561.                                         write_com(0x80+14);        //星期光標
  562.                                         if(add==0)
  563.                                         {
  564.                                                 delay(3);
  565.                                                 if(add==0)
  566.                                                 {
  567.                                                         while(!add);
  568.                                                         turn_val(week,1,0x06,4);
  569.                                                 }
  570.                                         }
  571.                                         if(dec==0)
  572.                                         {
  573.                                                 delay(3);
  574.                                                 if(dec==0)
  575.                                                 {
  576.                                                         while(!dec);
  577.                                                         turn_val(week,0,0x06,4);
  578.                                                 }
  579.                                         }
  580.                                 }
  581.                                 
  582.                                 if(s1num==5)
  583.                                 {
  584.                                         hour=ReadData(0x04);
  585.                                         write_com(0x80+0x40+2);        //時光標,因為是第二行的地址從0X40開始,所以加0X40。
  586.                                         if(add==0)
  587.                                         {
  588.                                                 delay(3);
  589.                                                 if(add==0)
  590.                                                 {
  591.                                                         while(!add);
  592.                                                         turn_val(hour,1,0x04,5);
  593.                                                 }
  594.                                         }
  595.                                         if(dec==0)
  596.                                         {
  597.                                                 delay(3);
  598.                                                 if(dec==0)
  599.                                                 {
  600.                                                         while(!dec);
  601.                                                         turn_val(hour,0,0x04,5);
  602.                                                 }
  603.                                         }
  604.                                 }
  605.                                 
  606.                                 if(s1num==6)//調時間分
  607.                                 {
  608.                                         minute=ReadData(0x03);
  609.                                         write_com(0x80+0x40+5);
  610.                                         if(add==0)
  611.                                         {
  612.                                                 delay(5);
  613.                                                 if(add==0)
  614.                                                 {
  615.                                                         while(!add);
  616.                                                         turn_val(minute,1,0x03,6);                                //寫入分寄存器   
  617.                                                 }
  618.                                         }
  619.                                         if(dec==0)
  620.                                         {
  621.                                                 delay(3);
  622.                                                 if(dec==0)
  623.                                                 {
  624.                                                         while(!dec);
  625.                                                         turn_val(minute,0,0x03,6);                                //寫入分寄存器
  626.                                                 }
  627.                                         }
  628.                                 }
  629.                                 
  630.                                 if(s1num==7)//調時間秒
  631.                                 {
  632.                                         second=ReadData(0x02);
  633.                                         write_com(0x80+0x40+8);//秒光標
  634.                                         if(add==0)
  635.                                         {
  636.                                                 delay(3);
  637.                                                 if(add==0)
  638.                                                 {
  639.                                                 while(!add);
  640.                                                 if(second==0x60)
  641.                                                 second=0x00;
  642.                                                 turn_val(second,1,0x02,7);        
  643.                                                 }
  644.                                         }
  645.                                         if(dec==0)
  646.                                         {
  647.                                                 delay(3);
  648.                                                 if(dec==0)
  649.                                                 {
  650.                                                         while(!dec);
  651.                                                         turn_val(second,0,0x02,7);                                
  652.                                                 }
  653.                                         }
  654.                                 }
  655.                                 
  656.                                 if(s1num==8)
  657.                                 {
  658.           writeData(0x0,0x00);//設置結束,開始計時

  659.                                 s1num=0;//s1num清零//
  660.                                         write_com(0x0c);//光標不閃爍//
  661.                                         break;
  662.                                 }
  663.                         }
  664.                 }
  665.         }
  666. }


  667. //---主函數---//
  668. void main()
  669. {
  670. P8563_init();        
  671. init();
  672.         
  673.         while(1)
  674.         {

  675.                 P8563_gettime();
  676.                 BCD_16( );

  677. …………限于本文篇幅 余下代碼請從51hei電子下載附件…………
復制代碼

0.png

下載(Proteus7.8打開,其他版本都不行):
PCF8563.rar (64.6 KB, 下載次數: 297)
回復

使用道具 舉報

ID:207690 發表于 2017-6-4 15:23 | 顯示全部樓層
好啊,樓主能下載么
回復

使用道具 舉報

ID:105206 發表于 2017-7-4 10:47 | 顯示全部樓層
看看,學習下,謝謝分享。
回復

使用道具 舉報

ID:105206 發表于 2017-10-20 09:02 | 顯示全部樓層
學習了,謝謝分享。
回復

使用道具 舉報

ID:142614 發表于 2017-11-8 21:14 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:323998 發表于 2018-5-7 23:32 | 顯示全部樓層
學習了
感謝樓主分享
回復

使用道具 舉報

ID:426889 發表于 2018-11-18 20:56 | 顯示全部樓層
LCD 沒有顯示任何數據啊
回復

使用道具 舉報

ID:158013 發表于 2019-1-21 17:35 | 顯示全部樓層
感謝樓主的分享!
回復

使用道具 舉報

ID:552564 發表于 2019-6-11 22:09 | 顯示全部樓層
非常感謝分享!
回復

使用道具 舉報

ID:644774 發表于 2019-11-21 09:43 | 顯示全部樓層
為什么我仿真的時候不能調數值呢?而且LCD上面沒有顯示D:\圖片1
回復

使用道具 舉報

ID:410680 發表于 2020-2-21 20:13 | 顯示全部樓層

看看,學習下,謝謝分享
回復

使用道具 舉報

ID:872135 發表于 2021-1-2 17:27 | 顯示全部樓層
LCD根本沒顯示
回復

使用道具 舉報

ID:328014 發表于 2021-1-9 17:26 | 顯示全部樓層

樓主說了,必須要Proteus7.8打開,,其他版本都不行
回復

使用道具 舉報

ID:795427 發表于 2022-1-2 17:06 | 顯示全部樓層
在8.9版本上顯示,IIC寫數據函數
  1. void writebyte(uchar wdata)
  2. {
  3.    uchar i;
  4.    for(i=0;i<8;i++)
  5.    {
  6.        if(wdata&0x80) SDA=1;
  7.        else SDA=0;
  8.        wdata<<=1;
  9.                  _nop_();
  10.         _nop_();
  11.        SCL=1;
  12.       _nop_();
  13.         _nop_();_nop_();
  14.         _nop_();_nop_();
  15.        SCL=0;
  16.    }
  17. //  WaitACK();     //I2C器件或通訊出錯,將會退出I2C通訊
  18. }
復制代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 干出白浆视频 | av在线天堂 | 美女福利网站 | 嫩草视频在线看 | 一区二区免费视频 | 成人亚洲| 久久国产一区二区 | 综合久久综合久久 | av在线免费观看网站 | 一区二区在线 | 久久免费精品视频 | 亚洲一区二区三区四区五区午夜 | 91精品国产91久久久久久 | 国产欧美一区二区三区免费 | 青草视频在线 | 国产精品色一区二区三区 | 欧美日韩精品一区 | 人操人人| 成人午夜电影网 | 久艹网站 | 国产在线一区二 | 91免费看片神器 | 亚洲成人福利视频 | 欧美日韩在线成人 | 九九九精品视频 | 伊人激情网| 国产一在线观看 | 日本又色又爽又黄的大片 | 97超碰站| 视频一区二区三区中文字幕 | 最新日韩在线视频 | 久久久久久免费毛片精品 | 精品国产欧美一区二区 | 精品国产伦一区二区三区观看体验 | 盗摄精品av一区二区三区 | 中文字幕久久精品 | av在线播放网站 | 国产精品久久久亚洲 | 国产精品自拍视频网站 | 国产成人99久久亚洲综合精品 | 国产99视频精品免费视频7 |