欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2268|回復: 0
收起左側

基于無線藍牙的數字時鐘 單片機程序

[復制鏈接]
ID:319688 發表于 2020-10-8 21:00 | 顯示全部樓層 |閱讀模式
匆忙之中做了這個用來抵擋導師的項目庫,略有粗糙還請見諒,以后有時間畫板子??不會吧哈哈哈


/************************************************/
改時間用的是藍牙調試寶
輸入格式:HEX(默認)
輸入內容:20100820585404
時間為2020年10月8日20點58分54秒星期4

引腳接線說明
     //LCD1602引腳定義
    #define LCDDATA P0
    sbit RS = P2^3;
    sbit RW = P2^4;
    sbit CS = P2^5;
    //DS1302引腳定義
    sbit    RST = P1^2;
    sbit    DAT = P1^1;
    sbit    CLK = P1^0;

匆忙之中做出來的這個,有時間畫板子加別的功能吧

單片機源程序如下:
  1. #include <reg52.h>
  2. #include "DS1302.h"
  3. #include "LCD1602.h"
  4. /*
  5. *在reg52頭文件定義了uchar
  6.         //LCD1602引腳定義
  7.         #define LCDDATA P0
  8.         sbit RS = P2^3;
  9.         sbit RW = P2^4;
  10.         sbit CS = P2^5;
  11.         //DS1302引腳定義
  12.         sbit    RST = P1^2;
  13.         sbit    DAT = P1^1;
  14.         sbit    CLK = P1^0;
  15. */
  16. #define FOSC 11059200L
  17. #define BAUD 9600       //UART baudrate
  18. #define T1MS (65536-FOSC/12/1000)

  19. uchar count = 200; //中斷循環標志位
  20. uchar flag = 0;
  21. uchar uart_receive_buffer[7]={0};
  22. //sbit led = P1^5;
  23. void DS1302_set_time(void);
  24. //定時器初始化
  25. void Init_timer1(void)
  26. {
  27.         TMOD = 0x10;            //set timer1 as mode1 (16-bit)
  28.     TL1 = T1MS;             //initial timer1 low byte
  29.     TH1 = T1MS >> 8;        //initial timer1 high byte
  30.     TR1 = 1;                //timer1 start running
  31.     ET1 = 1;                //enable timer1 interrupt
  32.     EA = 1;                 //open global interrupt switch
  33. }

  34. //定時器處理函數
  35. void time1(void) interrupt 3
  36. {                                
  37.     TL1 = T1MS;
  38.     TH1 = T1MS >> 8;
  39.         //count--;
  40.         if(count-- ==  0)
  41.         {
  42.                 count = 200;
  43.                 //led = ~led;
  44.                 DS1302_read_time();  //讀取時間
  45.                 LCD_time_buffer[0]=(time_buf[0]>>4); //年   
  46.                 LCD_time_buffer[1]=(time_buf[0]&0x0f);
  47.    
  48.                 LCD_time_buffer[2]=(time_buf[1]>>4);   
  49.                 LCD_time_buffer[3]=(time_buf[1]&0x0f);
  50.   
  51.                 LCD_time_buffer[4]=(time_buf[2]>>4); //月  
  52.                 LCD_time_buffer[5]=(time_buf[2]&0x0f);
  53.    

  54.                 LCD_time_buffer[6]=(time_buf[3]>>4); //日   
  55.                 LCD_time_buffer[7]=(time_buf[3]&0x0f);
  56.    
  57.                 LCD_time_buffer[14]=(time_buf[7]&0x07); //星期
  58.    
  59.                    //第2行顯示  
  60.                 LCD_time_buffer[8]=(time_buf[4]>>4); //時   
  61.                 LCD_time_buffer[9]=(time_buf[4]&0x0f);   

  62.                 LCD_time_buffer[10]=(time_buf[5]>>4); //分   
  63.                 LCD_time_buffer[11]=(time_buf[5]&0x0f);   

  64.                 LCD_time_buffer[12]=(time_buf[6]>>4); //秒   
  65.                 LCD_time_buffer[13]=(time_buf[6]&0x0f);       
  66.         }
  67. }
  68. //串口中斷初始化
  69. void Usart_Init(void)
  70. {
  71.         SCON = 0x50;
  72.     TL2 = RCAP2L = (65536-(FOSC/32/BAUD)); //Set auto-reload vaule
  73.     TH2 = RCAP2H = (65536-(FOSC/32/BAUD)) >> 8;
  74.         T2CON = 0x34;  //啟動定時器2
  75.         ES = 1;  //開串口中斷
  76.         EA = 1;  //開總中斷       
  77. }
  78. //串口處理函數
  79. void Usart_receive(void) interrupt 4
  80. {

  81.         EA = 0;
  82.         if(RI == 1)
  83.         {
  84.                 RI = 0;
  85.                 uart_receive_buffer[flag] = SBUF;
  86.                 //led = ~led;
  87.                 if(flag ==6)
  88.                 {
  89.                         flag = 0;
  90.                         DS1302_set_time();
  91.                 }
  92.                 else
  93.                 {
  94.                         flag++;
  95.                 }
  96.         }
  97.         EA = 1;       
  98. }
  99. void DS1302_set_time(void)
  100. {
  101.         DS1302_write_byte(ds1302_control_add,0x00);                        //關閉寫保護
  102.         DS1302_write_byte(ds1302_sec_add,0x80);                                //暫停時鐘
  103.         DS1302_write_byte(ds1302_charger_add,0xa9);            //涓流充電
  104.         DS1302_write_byte(ds1302_year_add,uart_receive_buffer[0]);                //年
  105.         DS1302_write_byte(ds1302_month_add,uart_receive_buffer[1]);                //月
  106.         DS1302_write_byte(ds1302_date_add,uart_receive_buffer[2]);                //日
  107.         DS1302_write_byte(ds1302_hr_add,uart_receive_buffer[3]);                //時
  108.         DS1302_write_byte(ds1302_min_add,uart_receive_buffer[4]);                //分
  109.         DS1302_write_byte(ds1302_sec_add,uart_receive_buffer[5]);                //秒
  110.         DS1302_write_byte(ds1302_day_add,uart_receive_buffer[6]);                //周
  111.         DS1302_write_byte(ds1302_control_add,0x80);                        //打開寫保護
  112. }
  113. void main(void)
  114. {
  115.         Delay_xms(50);
  116.         LCD_Init();
  117.         LCD_clear();
  118.         DSInit();
  119.         Delay_xms(10);
  120.         //DS1302_write_time();
  121.         Init_timer1();
  122.         Usart_Init();

  123.         while(1)
  124.         {
  125.                 Display();
  126. //                Delay_xms(500);
  127. //                LCD_write_char(0,0,flag);
  128. //                Delay_xms(500);
  129. //                flag++;
  130. //                if(flag>6)
  131. //                        flag = 0;

  132.         }
  133. }
復制代碼

所有資料51hei提供下載:
2020106項目庫.zip (45.02 KB, 下載次數: 13)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表