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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)DS1302時(shí)鐘芯片的鬧鐘程序,想加一個(gè)整點(diǎn)報(bào)時(shí)滴滴十秒

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
想加一個(gè)整點(diǎn)報(bào)時(shí)滴滴十秒的一個(gè)程序,不知道怎么寫,寫好了加在整個(gè)程序的哪個(gè)位置,請各位大佬不吝賜教,小弟感激不盡!

單片機(jī)源程序如下:
//1602顯示時(shí)鐘,按K3進(jìn)入時(shí)鐘設(shè)置,按K1選擇設(shè)置的時(shí)分秒日月,按K2加1。//
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define lcd1602data P0
  4. typedef unsigned char u8;
  5. typedef unsigned int u16;
  6. sbit E=P2^7;   //設(shè)置液晶端口    使能信號(hào)
  7. sbit RW=P2^5;  //讀寫選擇  讀:H/寫:L
  8. sbit RS=P2^6;  //數(shù)據(jù)命令選擇  數(shù)據(jù):H/命令:L
  9. sbit  key1=P3^1;
  10. sbit  key2=P3^0;
  11. sbit  key3=P3^2;
  12. sbit  spk=P1^7;

  13. sbit SCLK=P3^6;   //設(shè)置時(shí)鐘端口
  14. sbit IO=P3^4;
  15. sbit RST=P3^5;  
  16. u16 read[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};   //設(shè)置秒分時(shí)日月周年讀寄存器
  17. u16 write[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};  //設(shè)置秒分時(shí)日月周年寫寄存器
  18. u8 time[]={0x30,0x30,0x23,0x13,0x09,0x04,0x19};    //存放初始時(shí)間
  19. u16 setmark,setplace;      //setmark檢測key3是否按下,setplace選擇要調(diào)整的時(shí)間塊。
  20. void delay_ms(u16 n);
  21. void initConfiguration();
  22. void lcdDisplay();
  23. void lcdwrite_com(u8 datas);
  24. void lcdwrite_datas(u8 datas);
  25. void lcdinit();
  26. void writebyte(u8 address,u8 datas);
  27. u8 readbyte(u8 address);
  28. void ds1302init();
  29. void read_time();
  30. void DIDI(u16);
  31. void main()
  32. {
  33.   u16 i;
  34.   initConfiguration();   //初始化
  35.   lcdinit();
  36.   ds1302init();
  37.   while(1)
  38.   {
  39.    if(setmark==0)    //時(shí)鐘正常運(yùn)作
  40.    {
  41.     read_time();
  42.    }
  43.    else        //調(diào)整時(shí)間
  44.    {
  45.      if(key1==0)
  46.     {
  47.      delay_ms(1);
  48.     if(key1==0)
  49.     {
  50.        setplace++;     //按下key1要調(diào)整的時(shí)間塊加一
  51.       setplace%=7;
  52.     }
  53.     while(i<50&&key1==0)    //等待key1松開
  54.      {
  55.      i++;
  56.      delay_ms(10);
  57.      }
  58.      i=0;
  59.     }

  60.     if(key2==0)
  61.     {
  62.       delay_ms(1);
  63.      if(key2==0)        //按下key2對應(yīng)的初始時(shí)間加一
  64.      {
  65.        time[setplace]++;
  66.      if((time[setplace]&0x0f)>9)      //換成BCD碼。
  67.      {
  68.       time[setplace]=time[setplace]+6;
  69.      }
  70.      if((time[setplace]>=0x60)&&(setplace<2))  //分秒只能到59
  71.      {
  72.       time[setplace]=0;
  73.      }
  74.      if((time[setplace]>=0x24)&&(setplace==2))  //小時(shí)只能到23
  75.      {
  76.       time[setplace]=0;
  77.      }
  78.      if((time[setplace]>=0x32)&&(setplace==3))  //日只能到31
  79.      {
  80.       time[setplace]=1;
  81.      }
  82.      if((time[setplace]>=0x13)&&(setplace==4))  //月只能到12
  83.      {
  84.       time[setplace]=1;
  85.      }
  86.      if((time[setplace]>=0x8)&&(setplace==5))  //周只能到7
  87.      {
  88.      time[setplace]=1;
  89.      }
  90.                   
  91.      }
  92.      while((i<50)&&(0==key2))
  93.      {
  94.       i++;
  95.      delay_ms(10);
  96.      }
  97.      i=0;
  98.     }
  99.    }
  100.    lcdDisplay();
  101.   }
  102. }



  103. void delay_ms(u16 n)    //準(zhǔn)確延時(shí)一毫秒,晶振12M
  104. {
  105. u16 a,b;
  106. for(;n>0;n--)
  107. {
  108.   for(a=199;a>0;a--)
  109.   {
  110.    for(b=1;b>0;b--)
  111.    {
  112.      ;
  113.    }
  114.   }
  115. }
  116. }


  117. void initConfiguration()  //初始化外部中斷0
  118. {
  119. EA=1;
  120. IT0=1;
  121. EX0=1;
  122. }
  123. void init0() interrupt 0  //按下key3時(shí)間保持不變
  124. {
  125.   delay_ms(10);
  126.   if(key3==0)
  127.   {
  128.    setmark=~setmark;
  129.   setplace=0;
  130.   ds1302init();
  131.   }
  132. }
  133. void lcdDisplay()      //顯示函數(shù)
  134. {

  135. lcdwrite_com(0x80+0x00);    //確定寫數(shù)據(jù)的位置
  136. lcdwrite_datas('2');
  137. lcdwrite_datas('0');
  138. lcdwrite_datas('0'+time[6]/16);    //寫入年份的高位
  139. lcdwrite_datas('0'+(time[6]&0x0f));  //低位
  140. lcdwrite_datas('-');
  141. lcdwrite_datas('0'+time[4]/16);
  142. lcdwrite_datas('0'+(time[4]&0x0f));  //里面的小括號(hào)很重要
  143. lcdwrite_datas('-');  
  144. lcdwrite_datas('0'+time[3]/16);
  145. lcdwrite_datas('0'+(time[3]&0x0f));
  146.   
  147. lcdwrite_com(0x8c);
  148. lcdwrite_datas('0'+(time[5]&0x07));
  149. lcdwrite_com(0xc0);        //跳線帽Joe接vcc
  150. lcdwrite_datas('0'+time[2]/16);
  151. lcdwrite_datas('0'+(time[2]&0x0f));
  152. lcdwrite_datas('-');
  153. lcdwrite_datas('0'+time[1]/16);
  154. lcdwrite_datas('0'+(time[1]&0x0f));
  155. lcdwrite_datas('-');
  156. lcdwrite_datas('0'+time[0]/16);   
  157. lcdwrite_datas('0'+(time[0]&0x0f));
  158. }
  159. void lcdwrite_com(u8 datas)    //lcd液晶寫入指令操作        模擬時(shí)序
  160. {
  161. E=0;
  162. RW=0;
  163. RS=0;
  164. lcd1602data=datas;
  165. delay_ms(1);
  166. E=1;
  167. //delay_ms(1);
  168. E=0;

  169. }
  170. void lcdwrite_datas(u8 datas)   //lcd液晶寫入數(shù)據(jù)操作
  171. {
  172. E=0;
  173. RW=0;
  174. RS=1;
  175. lcd1602data=datas;
  176. delay_ms(1);       //延時(shí)不能太長否則調(diào)整不靈敏
  177. E=1;
  178. //delay_ms(1);
  179. E=0;

  180. }
  181. void lcdinit()       //LCD液晶初始化
  182. {
  183. lcdwrite_com(0x38);   //8位總線,顯示兩行,5x7點(diǎn)陣
  184. lcdwrite_com(0x0c);    //開顯示功能,無關(guān)標(biāo)
  185. lcdwrite_com(0x06);    //光標(biāo)右移,即數(shù)據(jù)依次右移
  186. lcdwrite_com(0x01);    //清屏
  187. lcdwrite_com(0x80);    //第一個(gè)數(shù)據(jù)位置
  188. }


  189. void writebyte(u8 address,u8 datas)     //在寄存器里寫時(shí)間數(shù)據(jù),模擬時(shí)序
  190. {
  191. u8 i;
  192. RST=0;
  193. _nop_();
  194. SCLK=0;
  195. _nop_();
  196. RST=1;
  197. _nop_();
  198. for(i=0;i<8;i++)
  199. {
  200.   IO=address&0x01;
  201.   address>>=1;
  202.   SCLK=1;
  203.   _nop_();
  204.   SCLK=0;
  205.   _nop_();
  206. }
  207. for(i=0;i<8;i++)
  208. {
  209.   IO=datas&0x01;
  210.   datas>>=1;
  211.   SCLK=1;
  212.   _nop_();
  213.   SCLK=0;
  214.   _nop_();
  215. }
  216. RST=0;
  217. }
  218. u8 readbyte(u8 address)     //讀寄存器里的時(shí)間數(shù)據(jù)
  219. {
  220. u8 i,datas,dat;
  221. RST=0;
  222. //_nop_();
  223. SCLK=0;
  224. //_nop_();
  225. RST=1;
  226. //_nop_();
  227. for(i=0;i<8;i++)
  228. {
  229.   IO=address&0x01;
  230.   address>>=1;
  231.   SCLK=1;
  232.   _nop_();
  233.   SCLK=0;
  234.   _nop_();
  235. }
  236. //_nop_();
  237. for(i=0;i<8;i++)
  238. {
  239.   dat=IO;
  240.   datas=(datas>>1)|(dat<<7);
  241.   SCLK=1;
  242.   _nop_();
  243.   SCLK=0;
  244.   _nop_();
  245. }
  246. RST=0;
  247. //_nop_();
  248. SCLK=1;
  249. //_nop_();
  250. IO=0;
  251. //_nop_();
  252. IO=1;
  253. //_nop_();
  254. return datas;
  255. }
  256. void ds1302init()      //在寄存器里寫入初始時(shí)間
  257. {
  258. u8 i;
  259. writebyte(0x8e,0x00);    //關(guān)閉寫保護(hù)寄存器
  260. for(i=0;i<7;i++)
  261. {
  262.   writebyte(write[i],time[i]);
  263. }
  264. writebyte(0x8e,0x80);     //打開寫保護(hù)寄存器
  265. }
  266. void read_time()       //讀取時(shí)鐘時(shí)間    time數(shù)組存儲(chǔ)
  267. {
  268. u8 i;
  269. for(i=0;i<7;i++)
  270. {
  271.   time[i]=readbyte(read[i]);
  272. }
  273. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:307020 發(fā)表于 2019-9-20 16:51 | 只看該作者
假設(shè)BUZ1上接VCC,在小時(shí)位增加1時(shí)P1.7輸出一定頻率的高電位脈沖(101010),Q1按頻率通斷,BUZ1出聲;秒加十后P1.7輸出低電位0關(guān)掉Q1便可。
回復(fù)

使用道具 舉報(bào)

板凳
ID:610666 發(fā)表于 2019-9-20 21:27 | 只看該作者
wj_yuq 發(fā)表于 2019-9-20 16:51
假設(shè)BUZ1上接VCC,在小時(shí)位增加1時(shí)P1.7輸出一定頻率的高電位脈沖(101010),Q1按頻率通斷,BUZ1出聲;秒加 ...

就是BUZ1上接Vcc,從23點(diǎn)到0點(diǎn),會(huì)響嗎?
具體程序該怎么寫,加在哪個(gè)位置?
請賜教
回復(fù)

使用道具 舉報(bào)

地板
ID:123289 發(fā)表于 2019-9-21 08:59 | 只看該作者
只要你不抄別人的程序,你就能辦到。
回復(fù)

使用道具 舉報(bào)

5#
ID:610666 發(fā)表于 2019-9-21 23:42 | 只看該作者
yzwzfyz 發(fā)表于 2019-9-21 08:59
只要你不抄別人的程序,你就能辦到。

因?yàn)椴惶@個(gè)是參照別人的程序?qū)懙模更c(diǎn)
回復(fù)

使用道具 舉報(bào)

6#
ID:307020 發(fā)表于 2019-9-23 13:13 | 只看該作者
即便是參照別人程序?qū)懙模惨靼祝愦a中“u8 time[]={0x30,0x30,0x23,0x13,0x09,0x04,0x19};    //存放初始時(shí)間”保存了從DS1302模塊讀來的實(shí)時(shí)數(shù)據(jù),對照DS1302的Data Sheet,研讀你程序代碼,找到”小時(shí)“”秒“數(shù)據(jù)在time[]中的具體位置,在代碼中增加”小時(shí)緩存“、”BUZ計(jì)數(shù)“變量,比較”小時(shí)緩存“與time[]中小時(shí)數(shù)據(jù);當(dāng)time[]中小時(shí)數(shù)據(jù)=”小時(shí)緩存“+1時(shí),按順序進(jìn)行如下內(nèi)容:1”BUZ計(jì)數(shù)“==10(BUZ秒數(shù));2P1.7輸出一定頻率的高電位脈沖(101010),Q1按頻率通斷,BUZ1出聲;3”BUZ計(jì)數(shù)“=”BUZ計(jì)數(shù)“-1直到”BUZ計(jì)數(shù)“=0;4P1.7輸出低電位0關(guān)掉Q1;”小時(shí)緩存“=”小時(shí)緩存“+1。具體放在什么位置無所謂,學(xué)單片機(jī)的樂趣在于搞明白,然后實(shí)現(xiàn)自己的想法。
回復(fù)

使用道具 舉報(bào)

7#
ID:610666 發(fā)表于 2019-9-23 21:53 | 只看該作者
wj_yuq 發(fā)表于 2019-9-23 13:13
即便是參照別人程序?qū)懙模惨靼祝愦a中“u8 time[]={0x30,0x30,0x23,0x13,0x09,0x04,0x19};    // ...

您好,我才開始學(xué),能明白您說的意思,但是自己學(xué)疏才淺不能實(shí)現(xiàn)您指點(diǎn)的這些,望您寫個(gè)范例,供我參考、學(xué)習(xí),感激不盡
回復(fù)

使用道具 舉報(bào)

8#
ID:429156 發(fā)表于 2019-9-26 14:38 | 只看該作者
程序中加個(gè)判斷不就搞定?
回復(fù)

使用道具 舉報(bào)

9#
ID:610666 發(fā)表于 2019-9-26 19:59 | 只看該作者
xiaomi_51hei 發(fā)表于 2019-9-26 14:38
程序中加個(gè)判斷不就搞定?

關(guān)鍵是不會(huì)呀
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人免费看片 | 亚洲高清视频一区 | 欧美日韩在线播放 | 国产极品粉嫩美女呻吟在线看人 | 国产精品日韩 | 亚洲欧美一区二区三区国产精品 | 国产午夜精品久久久久 | 亚洲免费在线观看 | 国产精品国产三级国产aⅴ中文 | 欧美综合国产精品久久丁香 | 人人玩人人干 | 久久久久久网站 | 欧美成年黄网站色视频 | 日本视频免费 | 国产日韩视频在线 | 久久亚洲欧美日韩精品专区 | 成人午夜影院 | 81精品国产乱码久久久久久 | 精品久久久久久久久久久久久 | 亚洲欧美在线一区 | 欧美久久精品一级c片 | 久久久久网站 | 欧美美女被c | 国产精品久久久久久久久免费桃花 | 99精品国产一区二区青青牛奶 | www.788.com色淫免费 | 九九热精品在线 | 亚洲高清在线 | 91久久久久久久久久久 | 日韩男人天堂 | 精品国产一区二区三区av片 | 日本亚洲欧美 | 99热成人在线 | 国产不卡在线观看 | 黄色毛片免费 | 日韩网站免费观看 | 亚洲精品粉嫩美女一区 | 成人在线播放 | 国产一区二区在线免费观看 | 精品成人在线视频 | 欧美舔穴 |