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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS1302可調(diào)時鐘源代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:85764 發(fā)表于 2015-7-15 23:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
數(shù)碼管顯示部分的原理圖:http://www.zg4o1577.cn/f/51hei-5.pdf

源代碼:

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit wela=P2^7;
  5. sbit dula=P2^6;
  6. sbit scl=P2^0;
  7. sbit sda=P2^1;
  8. sbit rst=P2^4;
  9. uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  10. uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  11. uchar dis_smg[6];
  12. uchar flag,keyscan,flag_s,key_set;
  13. uchar miao,fen,shi;
  14. bit flag_500ms;
  15. uchar read_ds1302(uchar add);
  16. void write_ds1302(uchar add,uchar dat);
  17. void write_SFM();
  18. void delay_1ms(uchar t)
  19. {
  20. uchar i,j;
  21. for(i=0;i<t;i++)
  22.   for(j=0;j<120;j++);
  23. }
  24. uchar bcdtoasc(uchar cha)
  25. {
  26.   cha=((cha/16)*10+(cha%16));
  27.   return cha;
  28. }
  29. uchar asctobcd(uchar cha)
  30. {
  31. cha=((cha/10)*16+(cha%10));
  32. return cha;
  33. }
  34. uchar bdata bdat;
  35. sbit dat0=bdat^0;
  36. sbit dat1=bdat^1;
  37. sbit dat2=bdat^2;
  38. sbit dat3=bdat^3;
  39. sbit dat4=bdat^4;
  40. sbit dat5=bdat^5;
  41. sbit dat6=bdat^6;
  42. sbit dat7=bdat^7;
  43. void smg_s(uchar dat)
  44. {  bdat=dat;
  45. if(dat0==1)
  46.   dis_smg[0]=0x00;
  47. if(dat1==1)
  48.   dis_smg[1]=0x00;
  49. if(dat2==1)
  50.   dis_smg[2]=0x00;
  51. if(dat3==1)
  52.   dis_smg[3]=0x00;
  53. if(dat4==1)
  54.   dis_smg[4]=0x00;
  55. if(dat5==1)
  56.   dis_smg[5]=0x00;
  57. if(dat6==1)
  58.   dis_smg[6]=0x00;
  59. if(dat7==1)
  60.   dis_smg[7]=0x00;

  61. }
  62. void scan()
  63. {
  64. static uchar i;
  65. uchar key;
  66. keyscan=10;
  67. keyscan=10;
  68. P3=0xf0;
  69. key=P3;
  70. key=key&0xf0;
  71. if(key!=0xf0)
  72. {
  73.   i++;
  74.   if(i>=7)
  75.   if(flag==0)
  76.   {
  77.    flag=1;
  78.    switch(key)
  79.    {
  80.     case 0xe0:keyscan=1;break;
  81.     case 0xd0:keyscan=2;break;
  82.     case 0xb0:keyscan=3;break;
  83.    }
  84.   }
  85. }
  86. else{flag=0;i=0;}
  87. }
  88. void clock_can()
  89. {
  90. delay_1ms(5);
  91. if(keyscan==1)
  92. {
  93.   write_ds1302(0x8e,0x00);
  94.   write_ds1302(0x80,0x80);
  95.   write_ds1302(0x8e,0x80);
  96.   key_set++;
  97.   if(key_set==1)
  98.    flag_s=0x30;
  99.   if(key_set==2)
  100.    flag_s=0x0c;
  101.   if(key_set==3)
  102.    flag_s=0x03;
  103.   if(key_set>=4)
  104.   {
  105.    key_set=0;
  106.    flag_s=0x00;
  107.    write_ds1302(0x8e,0x00);
  108.    write_ds1302(0x80,0x00);
  109.    write_ds1302(0x8e,0x80);
  110.   }
  111. }
  112. if(keyscan==2)
  113. {
  114.   if(key_set==1)
  115.   {
  116.    write_ds1302(0x8e,0x00);
  117.    shi=read_ds1302(0x85);
  118.    shi=bcdtoasc(shi);
  119.    shi++;
  120.    if(shi==24)
  121.    shi=0;
  122.    shi=asctobcd(shi);
  123.    write_ds1302(0x84,shi);
  124.    write_ds1302(0x8e,0x80);
  125.   }
  126.   if(key_set==2)
  127.   {
  128.    write_ds1302(0x8e,0x00);
  129.    fen=read_ds1302(0x83);
  130.    fen=bcdtoasc(fen);
  131.    fen++;
  132.    if(fen==60)
  133.    fen=0;
  134.    fen=asctobcd(fen);
  135.    write_ds1302(0x82,fen);
  136.    write_ds1302(0x8e,0x80);
  137.   }
  138.   if(key_set==3)
  139.   {
  140.    write_ds1302(0x8e,0x00);
  141.    miao=read_ds1302(0x81);
  142.    miao=bcdtoasc(miao);
  143.    miao++;
  144.    if(miao==60)
  145.    miao=0;
  146.    miao=asctobcd(miao);
  147.    write_ds1302(0x80,miao);
  148.    write_ds1302(0x8e,0x80);
  149.   }
  150. }
  151. if(keyscan==3)
  152. {
  153.   if(key_set==1)
  154.   {
  155.    write_ds1302(0x8e,0x00);
  156.    shi=read_ds1302(0x85);
  157.    shi=bcdtoasc(shi);
  158.    if(shi==0)
  159.    shi=24;
  160.    shi--;
  161.    shi=asctobcd(shi);
  162.    write_ds1302(0x84,shi);
  163.    write_ds1302(0x8e,0x80);
  164.   }
  165.   if(key_set==2)
  166.   {
  167.    write_ds1302(0x8e,0x00);
  168.    fen=read_ds1302(0x83);
  169.    fen=bcdtoasc(fen);
  170.    if(fen==0)
  171.    fen=60;
  172.    fen--;
  173.    fen=asctobcd(fen);
  174.    write_ds1302(0x82,fen);
  175.    write_ds1302(0x8e,0x80);
  176.   }
  177.   if(key_set==3)
  178.   {
  179.    write_ds1302(0x8e,0x00);
  180.    miao=read_ds1302(0x81);
  181.    miao=bcdtoasc(miao);
  182.    if(miao==0)
  183.    miao=60;
  184.    miao--;
  185.    miao=asctobcd(miao);
  186.    write_ds1302(0x80,miao);
  187.    write_ds1302(0x8e,0x80);
  188.   }
  189. }
  190. }
  191. void write_ds1302(uchar add,uchar dat)
  192. {
  193. uchar i;
  194. rst=1;
  195. for(i=0;i<8;i++)
  196. {
  197.   scl=0;
  198.   sda=add&0x01;
  199.   scl=1;
  200.   add>>=1;
  201. }
  202. for(i=0;i<8;i++)
  203. {
  204.   scl=0;
  205.   sda=dat&0x01;
  206.   scl=1;
  207.   dat>>=1;
  208. }
  209. rst=0;
  210. scl=0;
  211. sda=0;
  212. }
  213. uchar read_ds1302(uchar add)
  214. {
  215. uchar i,value;
  216. rst=1;
  217. for(i=0;i<8;i++)
  218. {
  219.   scl=0;
  220.   sda=add&0x01;
  221.   scl=1;
  222.   add>>=1;
  223. }
  224. for(i=0;i<8;i++)
  225. {
  226.   scl=0;
  227.   value>>=1;
  228.   if(sda==1)
  229.   value|=0x80;
  230.   scl=1;
  231. }
  232. rst=0;
  233. scl=0;
  234. sda=0;
  235. return value;
  236. }
  237. void write_SFM()
  238. {
  239. scl=0;rst=0;
  240. write_ds1302(0x8e,0x00);
  241. write_ds1302(0x80,0x55);
  242. write_ds1302(0x82,0x59);
  243. write_ds1302(0x84,0x23);
  244. write_ds1302(0x8e,0x80);
  245. }
  246. void dis_init()
  247. {
  248.     miao=read_ds1302(0x81);;
  249. fen =read_ds1302(0x83);;
  250. shi =read_ds1302(0x85);
  251. dis_smg[0]=smg_du[miao%16];       ;
  252. dis_smg[1]=smg_du[miao/16];        ;
  253. dis_smg[2]=smg_du[fen%16]|0x80;        ;
  254. dis_smg[3]=smg_du[fen/16];        ;
  255. dis_smg[4]=smg_du[shi%16]|0x80;        ;
  256. dis_smg[5]=smg_du[shi/16];     
  257. }
  258. void display()
  259. {
  260. static uchar i;
  261. P0=0x00;
  262. dula=1;dula=0;
  263. P0=smg_we[i];
  264. wela=1;wela=0;
  265. P0=dis_smg[5-i];
  266. dula=1;dula=0;
  267. i++;
  268. if(i>=6)i=0;
  269. }
  270. void init_time0()
  271. {
  272. TMOD=0X01;
  273. TR0=1;
  274. ET0=1;
  275. EA=1;
  276. }
  277. void main()
  278. {
  279.   write_SFM();
  280.   init_time0();
  281. while(1)
  282. {
  283.   if(flag_500ms)
  284.      dis_init();
  285.   else
  286.    smg_s(flag_s);
  287.   
  288.   scan();
  289.   clock_can();
  290.   display();
  291. }
  292. }
  293. void timer0() interrupt 1
  294. {
  295.   uchar i;
  296.   TH0=0xdb;
  297.   TL0=0xf0;
  298.   i++;
  299.   if(i>=50)
  300.   {
  301.    i=0;
  302.   flag_500ms=~flag_500ms;
  303.   }
  304. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:140489 發(fā)表于 2017-1-18 14:35 | 只看該作者
能走時,但不能調(diào)時
回復(fù)

使用道具 舉報

板凳
ID:140489 發(fā)表于 2017-1-18 15:13 | 只看該作者
能走時,能調(diào)時。開始不能調(diào)時是我的實驗板按鍵的腳位和這個程序不配套,修改后可以了
回復(fù)

使用道具 舉報

地板
ID:740383 發(fā)表于 2020-6-3 10:32 | 只看該作者
好東西
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲福利在线观看 | 日本成年免费网站 | 在线观看av网站永久 | 日韩二区 | 亚洲视频一区二区三区 | 亚洲黄色一区二区三区 | 亚洲精品视频在线观看免费 | www.亚洲精品 | 欧美日韩在线视频一区 | 欧美一区二区成人 | 夜夜爽99久久国产综合精品女不卡 | 国产精品久久久久永久免费观看 | 精品视频在线一区 | 91中文在线观看 | 国产精品mv在线观看 | 中文字幕一区二区三区在线视频 | 国产成年人小视频 | 亚洲欧美一区二区三区在线 | 日本污视频 | 久久高清国产视频 | 黄色网址在线免费观看 | 亚洲不卡在线视频 | 中文字幕 在线观看 | 日韩视频精品 | 欧美大片一区二区 | 国产91视频播放 | 国产一区2区| 在线播放国产一区二区三区 | 美女一区 | 欧美大片久久久 | 爱爱视频日本 | 成人亚洲片 | 日本中文字幕在线视频 | 久久最新| 日本 欧美 三级 高清 视频 | 日韩在线视频免费观看 | 黄色精品视频网站 | 精品综合 | 黄色毛片网站在线观看 | 日本一区二区三区视频在线 | 日本精品在线一区 |