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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1199|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)電子鐘調(diào)時(shí)問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:143767 發(fā)表于 2024-10-12 11:39 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這個(gè)程序是在網(wǎng)上找到的,硬件搭建完成后把程序燒錄到單片機(jī),電子鐘從00:00開始走,但是按調(diào)節(jié)按鈕后電子鐘顯示01:01,松開后又進(jìn)入走時(shí)狀態(tài),不管是單擊,雙擊,多擊,或按住不放等待幾秒后都是進(jìn)入走時(shí)狀態(tài),不能調(diào)節(jié)時(shí)間,請(qǐng)大家?guī)兔匆幌逻@程序有什么問題,謝謝

//下載時(shí)選擇片內(nèi)RC振蕩12M
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit din=P3^0; //引腳定義
  5.   sbit clk=P3^1;
  6. sbit sck=P3^2;
  7. sbit SDA=P3^3;
  8. sbit SCL=P3^4;
  9. sbit set=P3^5;
  10. bit ack; //應(yīng)答位

  11. #define DS3231_WriteAddress 0xD0//器件寫地址
  12. #define DS3231_ReadAddress  0xD1//器件讀地址
  13. #define DS3231_SECOND  0x00//秒
  14. #define DS3231_MINUTE  0x01//分
  15. #define DS3231_HOUR      0x02//時(shí)
  16. #define DS3231_WEEK      0x03//星期
  17. #define DS3231_DAY      0x04//日
  18. #define DS3231_MONTH  0x05//月
  19. #define DS3231_YEAR      0x06//年
  20. //#define bcd_hex(bcd) ((((uchar)bcd) & 0xF0) >> 4) * 10 +  (((uchar)bcd) & 0x0F) //8421碼轉(zhuǎn)16進(jìn)制
  21. //uchar bcd_hex(uchar bcd){return((bcd/16*10)+(bcd&0x0f));}
  22. //#define hex_bcd(hex) (((u8)hex) % 10) + ((((u8)hex) /10) << 4)//16進(jìn)制轉(zhuǎn)8421碼

  23. void delayus(uint us) {while(--us);}
  24. void Start_I2C(void){SDA=1;delayus(1);SCL=1;delayus(5);SDA=0;delayus(5);SCL=0;delayus(2);} //I2C開始
  25. void Stop_I2C(void) {SDA=0;delayus(1);SCL=1;delayus(5);SDA=1;delayus(5);} //I2C停止
  26. void SendByte_595(uchar date); //74hc595發(fā)送字節(jié)時(shí)序
  27. void  SendByte_3231(uchar date); //ds3231發(fā)送字節(jié)時(shí)序
  28. uchar write_byte_3231(uchar addr,uchar write_date);//指定地址寫入字節(jié)
  29. uchar RcvdByte_3231(void); //ds3231接收字節(jié)時(shí)序
  30. void  Ack_3231(bit a); // 發(fā)送應(yīng)答與否
  31. uchar read_current(void);
  32. uchar read_random(uchar random_addr);
  33. // uchar date[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  34. code uchar code_led[]={
  35. 0x40,  // 0
  36. 0x79,  // 1
  37. 0x24,  // 2
  38. 0x30,  // 3
  39. 0x19,  // 4
  40. 0x12,  // 5
  41. 0x02,  // 6  
  42. 0x78,  // 7
  43. 0x00,  // 8
  44. 0x10,  // 9
  45. 0x08,  // A
  46. 0x03,  // B
  47. 0x46,  // C
  48. 0x21,  // D
  49. 0x06,  // E
  50. 0x0E  // F   
  51.     //0x00
  52. };


  53. void main()
  54. {
  55. uint  d=0;//點(diǎn)閃計(jì)時(shí)
  56. uchar i;
  57. uchar miao,fen,shi,ri,yue,nian;   
  58. uchar w[4];
  59. //uchar n=20,y=10,r=3,s=14,f=16,m=31;//調(diào)整時(shí)間用
  60. while(1){
  61. ////////////////////////////

  62. d=d+1;
  63. if(d%1000==0)
  64. {
  65. if(miao!=read_random(DS3231_SECOND))
  66. {  
  67.    d=0;
  68.    miao =read_random(DS3231_SECOND);
  69.    fen  =read_random(DS3231_MINUTE);
  70.    shi =read_random(DS3231_HOUR);
  71.    ri  =read_random(DS3231_DAY);
  72.    yue =read_random(DS3231_MONTH);
  73.    nian =read_random(DS3231_YEAR);
  74.   
  75.    w[0]=code_led[shi/16];w[1]=code_led[shi%16];
  76.    w[2]=code_led[fen/16];w[3]=code_led[fen%16];
  77. //   w[0]=code_led[fen/16];w[1]=code_led[fen%16];  
  78. //   w[2]=code_led[miao/16];w[3]=code_led[miao%16];   
  79.    for (i=0; i<4; i++) SendByte_595(w[i]); sck=0;delayus(5);sck=1;delayus(5);
  80. }
  81. }
  82. if(d==26000)
  83. {
  84.   w[1]=code_led[shi%16]^0x80;
  85.   w[2]=code_led[fen/16]^0x80;
  86. //  w[0]=code_led[fen/16];w[1]=code_led[fen%16]^0x80;  
  87. //  w[2]=code_led[miao/16]^0x80;w[3]=code_led[miao%16];   
  88.   for (i=0; i<4; i++) SendByte_595(w[i]); sck=0;delayus(5);sck=1;delayus(5);
  89. }
  90. /////////////////////////////////////
  91.   
  92.    while(set==0)
  93.    {
  94. w[0]=code_led[yue/16];w[1]=code_led[yue%16];
  95.     w[2]=code_led[ri/16]^0x80;w[3]=code_led[ri%16];
  96. for (i=0; i<4; i++) SendByte_595(w[i]); sck=0;delayus(5);sck=1;delayus(5);

  97. //   write_byte_3231(DS3231_SECOND,m/10*16+m%10);
  98. //   write_byte_3231(DS3231_MINUTE,f/10*16+f%10);
  99. //   write_byte_3231(DS3231_HOUR,s/10*16+s%10);
  100. //   write_byte_3231(DS3231_DAY,r/10*16+r%10);
  101. //   write_byte_3231(DS3231_MONTH,y/10*16+y%10);
  102. //   write_byte_3231(DS3231_YEAR,n/10*16+n%10);
  103.      }
  104. }
  105. }
  106. void SendByte_595(uchar date){uchar i;for(i=0;i<8;i++){clk=0;delayus(2);date<<=1;din=CY;delayus(5);clk=1;delayus(5);}}//595移位輸出
  107. void SendByte_3231(uchar date) //發(fā)送一個(gè)字節(jié)
  108. {
  109. uchar i;
  110. for (i=0;i<8;i++){date<<=1;SDA=CY;delayus(1);SCL=1;delayus(5);SCL=0;}
  111. delayus(2);SDA=1;delayus(2);SCL=1;delayus(3);//釋放SDA 準(zhǔn)備接收應(yīng)答信號(hào)
  112. if(SDA==1)ack=0;else ack=1;    //檢測(cè)應(yīng)答信號(hào)
  113. SCL=0; delayus(2);
  114. }
  115. uchar RcvdByte_3231(void)//讀取一個(gè)字節(jié)的數(shù)據(jù)
  116. {
  117.   uchar i;
  118.   uchar date=0;
  119.   SDA=1;
  120.   for(i=0;i<8;i++)
  121.   {
  122.    delayus(1);
  123.    SCL=0;delayus(5); SCL=1;delayus(3);
  124.    date=date<<1;
  125.    if(SDA==1)date+=1; delayus(2);
  126.    }
  127.   SCL=0;
  128.    delayus(2);
  129.    return(date);
  130. }

  131. void Ack_3231(bit a){if(a==0)SDA=0;else SDA=1; delayus(3);SCL=1;delayus(5);SCL=0;delayus(2);}  //發(fā)送應(yīng)答與否

  132. // uchar write_byte_3231(uchar addr,uchar write_date)
  133. // {
  134. // Start_I2C();
  135. // SendByte_3231(DS3231_WriteAddress);//呼叫ds3231傳送
  136. // if(ack==0)return 0;
  137. // SendByte_3231(addr);//送地址
  138. // if(ack==0)return 0;// 無應(yīng)答退出
  139. // SendByte_3231(write_date);//送數(shù)據(jù)
  140. // if(ack==0)return 0;// 無應(yīng)答退出
  141. // Stop_I2C();
  142. // delayus(10);
  143. // return 1;//  發(fā)送成功
  144. // }

  145. uchar read_current(void)
  146. {
  147. uchar read_date;
  148. Start_I2C();
  149. SendByte_3231(DS3231_ReadAddress);
  150. if(ack==0)return 0;// 無應(yīng)答退出
  151. read_date=RcvdByte_3231();
  152. Ack_3231(1);//接收到一個(gè)字節(jié)數(shù)據(jù)后非應(yīng)答
  153. Stop_I2C();
  154. return read_date;
  155. }

  156. uchar read_random(uchar random_addr)
  157. {
  158.   Start_I2C();
  159.   SendByte_3231(DS3231_WriteAddress);//呼叫ds3231傳送
  160.   if(ack==0)return 0;// 無應(yīng)答退出
  161.   SendByte_3231(random_addr);
  162.   if(ack==0)return 0;// 無應(yīng)答退出
  163.   return (read_current());
  164. }
復(fù)制代碼

電路圖

補(bǔ)充一下, 單片機(jī)用的是STC15L104W,我用的是STC15W104,網(wǎng)上查是可以直接代換的。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:155811 發(fā)表于 2024-10-12 14:37 | 只看該作者
使用 狀態(tài)變量,按動(dòng)按鈕時(shí)候,依次進(jìn)入 調(diào)日時(shí)分,可以解決問題
回復(fù)

使用道具 舉報(bào)

板凳
ID:556433 發(fā)表于 2024-10-12 15:26 | 只看該作者
你這程序都不是完整的啊,沒實(shí)現(xiàn)調(diào)整時(shí)間的功能,而且最好增加一個(gè)狀態(tài)變量,來判斷當(dāng)前是顯示時(shí)間還是調(diào)整時(shí)間的模式。
回復(fù)

使用道具 舉報(bào)

地板
ID:143767 發(fā)表于 2024-10-12 18:11 | 只看該作者
這個(gè)狀態(tài)變量怎么寫呢
回復(fù)

使用道具 舉報(bào)

5#
ID:556433 發(fā)表于 2024-10-14 11:58 | 只看該作者
void main() {
    uchar mode = 0; // 0顯示模式、1調(diào)時(shí)模式

    while (1) {

    if (set == 0) {
        mode = 1 - mode; // 切換模式
        delayus(1000); // 防抖
    }

    if (mode == 1) {
        // 在此處添加調(diào)整時(shí)間的邏輯
        // 比如按下其他按鈕來增加/減少時(shí)間
    }
  }
}

回復(fù)

使用道具 舉報(bào)

6#
ID:143767 發(fā)表于 2024-10-16 10:50 | 只看該作者
嘗試寫了一下,沒成功,整不明白了,求高人指點(diǎn)
回復(fù)

使用道具 舉報(bào)

7#
ID:161164 發(fā)表于 2024-10-16 14:19 | 只看該作者
dj3365191 發(fā)表于 2024-10-16 10:50
嘗試寫了一下,沒成功,整不明白了,求高人指點(diǎn)

只有一個(gè)set按鍵是如何控制數(shù)值加減?
回復(fù)

使用道具 舉報(bào)

8#
ID:143767 發(fā)表于 2024-10-17 10:50 | 只看該作者
lkc8210 發(fā)表于 2024-10-16 14:19
只有一個(gè)set按鍵是如何控制數(shù)值加減?

是他原來就這樣設(shè)定的,但在程序中不知哪里是寫按鍵使用邏輯的地方
回復(fù)

使用道具 舉報(bào)

9#
ID:143767 發(fā)表于 2024-10-22 10:13 | 只看該作者
keyneko 發(fā)表于 2024-10-14 11:58
void main() {
    uchar mode = 0; // 0顯示模式、1調(diào)時(shí)模式

怎樣寫調(diào)整時(shí)間的邏輯,沒有其他按鈕了,除非復(fù)用
回復(fù)

使用道具 舉報(bào)

10#
ID:1133081 發(fā)表于 2024-10-23 06:23 | 只看該作者
dj3365191 發(fā)表于 2024-10-22 10:13
怎樣寫調(diào)整時(shí)間的邏輯,沒有其他按鈕了,除非復(fù)用

4位冒號(hào)數(shù)碼管時(shí)鐘 單鍵調(diào)時(shí) 仿真.rar (128.22 KB, 下載次數(shù): 4) 給你一個(gè)單鍵調(diào)時(shí)的例子參考
回復(fù)

使用道具 舉報(bào)

11#
ID:143767 發(fā)表于 2024-10-23 10:31 | 只看該作者
WL0123 發(fā)表于 2024-10-23 06:23
給你一個(gè)單鍵調(diào)時(shí)的例子參考

謝謝,我試著改一下看看
回復(fù)

使用道具 舉報(bào)

12#
ID:961114 發(fā)表于 2024-10-24 17:22 | 只看該作者
學(xué)習(xí)郭老師鬧鐘

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区二区在线观看 | 日韩精品视频网 | 欧美一区二区三区在线观看视频 | 国产免费一级一级 | 亚洲在线免费观看 | 久久99精品久久 | 国产欧美精品 | 日韩成人免费视频 | 黄视频网站在线 | 一区二区三区成人 | 午夜视频在线观看视频 | 精品真实国产乱文在线 | 国产精品成人国产乱一区 | 亚洲精品视频在线观看免费 | 日韩中文字幕免费在线 | 欧美激情一区二区 | 久久婷婷国产麻豆91 | 成人午夜免费在线视频 | 久久久国产一区 | 噜噜噜噜狠狠狠7777视频 | 毛片入口| 福利视频1000 | 综合久久99 | 精品免费国产一区二区三区 | 亚洲国产精品久久久久婷婷老年 | 欧美日韩在线一区二区 | 男女午夜免费视频 | 在线观看日韩 | 中文字幕亚洲一区 | 亚洲国产一区二区三区在线观看 | 久久精品免费 | 日韩精品免费一区 | 91欧美| 亚洲综合色自拍一区 | 精品国产免费人成在线观看 | 九九精品在线 | 日韩免费高清视频 | 91久久综合| 亚洲免费福利视频 | 免费国产精品久久久久久 | 精品自拍视频 |