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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5932|回復: 2
打印 上一主題 下一主題
收起左側

程序鬧鐘-用at89s52和七段數碼管實現計時時鐘并用4x4矩陣鍵盤控制

[復制鏈接]
跳轉到指定樓層
樓主
ID:71259 發表于 2014-12-30 23:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. /*

  2. 程序名稱:at89s52實現時鐘《二》
  3. 程序功能:用at89s52和七段數碼管實現計時時鐘并用4x4矩陣鍵盤控制
  4. 運行環境:keil uv2

  5. 需改進點:未能用鍵盤設置鬧鐘
  6. 作者      :hankjulianth
  7. */

  8. #include"reg52.h"
  9. #define uchar unsigned char
  10. #define uint  unsigned int
  11. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  12. uint sec,min,hour;//秒,分,時計數
  13. uint t1;//定義計數器
  14. sbit sc=P1^7;//鎖存信號
  15. sbit sp=P1^1;//蜂鳴器
  16. void _init_();//初始化函數
  17. void timer0();//定時器T0中斷函數
  18. void showtime();//時間顯示函數
  19. void speker(uint,uint);//蜂鳴器函數,定時鬧鐘
  20. void settime(uint,uint,uint);
  21. void delay(uint);//延時函數
  22. //鍵盤控制區設置
  23. //六鍵控制
  24. //一鍵控制開始,一鍵控制停止
  25. //一鍵控制分鐘加,一鍵控制分鐘減,一鍵控制小時加,一鍵控制小時減,用于調時
  26. uint temp;
  27. /*

  28. void stop();//計時停止
  29. void _key_5();
  30. void start();//計時開始
  31. void _key_6();
  32. */
  33. void minminu();//分鐘減
  34. void _key_1();
  35. void minadd();//分鐘加
  36. void _key_2();
  37. void hourminu();//小時減
  38. void _key_3();
  39. void houradd();//小時加
  40. void _key_4();
  41. uchar key;//鍵值
  42. void main()
  43. {
  44.   t1=0;
  45.   settime(0,0,0);
  46.   temp=0;
  47.   _init_();
  48.   while(1)
  49.   {
  50.     //鍵盤監測程序
  51.   P3=0x0f;
  52.   temp=P3;
  53.   if(temp!=0x0f)
  54.   {
  55.    
  56.    temp=P3;
  57.    if(temp!=0x0f)
  58.    {
  59.     switch(temp)
  60.     {
  61.      case 0x8f : P3=0xf0;
  62.         temp=P3;
  63.         if(temp!=0xf0)
  64.         {
  65.          
  66.          temp=P3;
  67.          if(temp!=0xf0)
  68.          {
  69.           switch (temp)
  70.           {
  71.            case 0xf1 : _key_1();
  72.             break;
  73.            case 0xf2 : _key_2();
  74.             break;
  75.            case 0xf4 : _key_3();
  76.             break;
  77.            case 0xf8 : _key_4();
  78.             break;
  79.           }
  80.          }
  81.         }
  82.         break;
  83.        default:
  84.         break;
  85.      /*case 0x4f : P3=0xf0;
  86.         temp=P3;
  87.         if(temp!=0xf0)
  88.         {
  89.          delay(100);
  90.          temp=P3;
  91.          if(temp!=0xf0)
  92.          {
  93.           switch (temp)
  94.           {
  95.            case 0xf1 : _key_5();
  96.             break;
  97.            case 0xf2 : _key_6();
  98.             break;
  99.            /case 0xf4 : _key_7();
  100.             break;
  101.            case 0xf8 : _key_8();
  102.             break;
  103.           }
  104.          }
  105.         }
  106.         break;
  107.        case 0x2f : P3=0xf0;
  108.         temp=P3;
  109.         if(temp!=0xf0)
  110.         {
  111.          delay(100);
  112.          temp=P3;
  113.          if(temp!=0xf0)
  114.          {
  115.           switch (temp)
  116.           {
  117.            case 0xf1 : _key_9();
  118.             break;
  119.            case 0xf1 : _key_10();
  120.             break;
  121.            case 0xf1 : _key_11();
  122.             break;
  123.            case 0xf1 : _key_12();
  124.             break;
  125.           }
  126.          }
  127.         }
  128.         break;
  129.        case 0x1f : P3=0xf0;
  130.         temp=P3;
  131.         if(temp!=0xf0)
  132.         {
  133.          delay(100);
  134.          temp=P3;
  135.          if(temp!=0xf0)
  136.          {
  137.           switch (temp)
  138.           {
  139.            case 0xf1 : _key_13();
  140.             break;
  141.            case 0xf1 : _key_14();
  142.             break;
  143.            case 0xf1 : _key_15();
  144.             break;
  145.            case 0xf1 : _key_16();
  146.             break;
  147.           }
  148.          }
  149.         }
  150.         break;*/ //此程序只用其中四個鍵盤即可
  151.     }
  152.    }
  153.   }
  154.   if(t1==20)
  155.   {
  156.     sec++;
  157.     t1=0;
  158.     speker(0,2);
  159.   }
  160.   if(sec==60)
  161.   {
  162.     min+=1;
  163.     sec=0;
  164.   }
  165.   if(min==60)
  166.   {
  167.     hour+=1;
  168.     min=0;
  169.   }
  170.   if(hour==24)
  171.   {
  172.    hour=0;
  173.   }

  174.      showtime();
  175.   }
  176. }

  177. void _init_()
  178. {

  179.   //啟用且設置T0,定時50ms
  180.   TH0=(65536-50000)/256;
  181.   TL0=(65536-50000)%256;
  182.   EA=1;
  183.   ET0=1;
  184.   TMOD=0x01;
  185.   TR0=1;
  186. }
  187. void timer0() interrupt 1
  188. {
  189.   _init_();
  190.   t1++;
  191. }

  192. void settime(uint i,uint j,uint k)//設置初始時間函數:   k : j : i

  193. {
  194. sec=i;
  195. min=j;
  196. hour=k;

  197. }
  198. void speker(uint i,uint j)
  199. {
  200. if(hour==j&&min==i)
  201. {
  202.   
  203.    sp=1;
  204.    sp=0;

  205. }
  206. }
  207. void showtime()
  208. {
  209.   //秒鐘顯示
  210.   sc=1;
  211.   P0=table[sec/10];
  212.   P2=0x06;
  213.   sc=0;

  214.   sc=1;
  215.   P0=table[sec%10];
  216.   P2=0x07;
  217.   sc=0;


  218.   //分鐘顯示
  219.   sc=1;
  220.   P0=table[min/10];
  221.   P2=0x03;
  222.   sc=0;

  223.   sc=1;
  224.   P0=table[min%10];
  225.   P2=0x04;
  226.   sc=0;

  227.   //時鐘顯示
  228.   sc=1;
  229.   P0=table[hour/10];
  230.   P2=0x01;
  231.   sc=0;

  232.   sc=1;
  233.   P0=table[hour%10];
  234.   P2=0x0;
  235.   sc=0;
  236. }
  237. void delay(uint z)
  238. {
  239. uint x,y;
  240. for(x=100;x>=0;x--)
  241.   for(y=z;y>=0;y--);
  242. }
  243. /*void stop()
  244. {

  245. }
  246. void start()
  247. {

  248. }*/
  249. void minminu() { min--;}
  250. void minadd() { min++;}
  251. void hourminu() {hour--;}
  252. void houradd() { hour++;}
  253. void _key_1() {minminu();}
  254. void _key_2() {minadd();}
  255. void _key_3() {hourminu();}
  256. void _key_4() {houradd();}
復制代碼


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

使用道具 舉報

沙發
ID:71259 發表于 2014-12-30 23:45 | 只看該作者
字符顯示:
  1. /* 程序名稱:點陣顯示器顯示
  2. 程序作用:采用AT89C52和8x8點陣顯示器顯示字符
  3. 程序拓展:可以實現鍵盤輸入顯示字符
  4. 程序作者:hankjulianth
  5. 完成時間:10。3.30——下午

  6. */
  7. #include"reg52.h"
  8. #define uint unsigned int
  9. #define uchar unsigned char
  10. uchar code pa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  11. uchar code ln[9][8]={
  12. {0xff,0x83,0xef,0xef,0xef,0xef,0xef,0x83},//"I"
  13. {0xff,0x99,0x66,0x7e,0xbd,0xdb,0xe7,0xff},//心符號
  14. {0xff,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff},//"U"
  15. {0xff,0xef,0xef,0xab,0x6d,0xe7,0xef,0xff},//"小"
  16. {0xff,0xff,0x83,0xef,0xef,0xef,0xef,0xef},//"T"
  17. {0xff,0xff,0xff,0x81,0xff,0xff,0xff,0xff},//"--"
  18. {0xfd,0x11,0xd0,0x90,0x57,0x90,0xd7,0xd0},//"鄒"
  19. {0xfb,0xfb,0xe0,0xfb,0xf1,0xd9,0x49,0x86},//"志"
  20. {0x80,0xf7,0xd5,0xe3,0xc1,0xf7,0xf7,0xf7},//"平"
  21. };
  22. uint i=0,j=0,timecount=0;
  23. void main()
  24. {
  25. TMOD=0x01;
  26. TH0=(65536-3000)/256;//定時3ms
  27. TL0=(65536-3000)%256;
  28. TR0=1;
  29. EA=1;
  30. ET0=1;
  31. while(1)
  32. {
  33.   ;
  34. }
  35. }
  36. void timer0() interrupt 1
  37. {
  38. TMOD=0x01;
  39. TH0=(65536-3000)/256;
  40. TL0=(65536-3000)%256;
  41. TR0=1;
  42. EA=1;
  43. ET0=1;
  44. P0=pa[j];
  45. P2=ln[i][j];
  46. j++;
  47. if(j>7)
  48. {
  49.   j=0;
  50. }
  51. timecount++;
  52. if(timecount==333)//每個字時間間隔為333 X 3ms
  53. {
  54.   timecount=0;
  55.   i++;
  56.   if(i>8)
  57.   {
  58.    i=0;
  59.   }
  60. }
  61. }
復制代碼
回復

使用道具 舉報

板凳
ID:71259 發表于 2014-12-30 23:46 | 只看該作者
改進版的程序:
  1. /*程序名稱:改進的at89s52實現時鐘

  2.   程序功能:用at89s52和七段數碼管實現計時時鐘,用掃描方式顯示年月日時分秒

  3.   作者      :hankjulianth

  4. */

  5. #include"reg52.h"
  6. #define uchar unsigned char
  7. #define uint  unsigned int
  8. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  9. uint year,month,day,sec,min,hour;//秒,分,時計數
  10. uint t1;//定義計數器
  11. sbit sc=P3^7;//鎖存信號
  12. sbit sp=P1^1;//蜂鳴器
  13. void _init_();//初始化函數
  14. void timer0();//定時器T0中斷函數
  15. void showtime();//時間顯示函數
  16. void speker(uint,uint);//蜂鳴器函數,定時鬧鐘
  17. void settime(uint,uint,uint,uint,uint,uint);//設置年,月,日,時,分,秒
  18. void delay(uint);//延時函數
  19. void main()
  20. {
  21.   t1=0;
  22.   settime(10,4,16,0,0,0);
  23.   _init_();
  24.   while(1)
  25.   {
  26.     if(t1==20)
  27.     {
  28.       sec++;
  29.       t1=0;
  30.      }
  31.     if(sec==60)
  32.     {
  33.       min+=1;
  34.       sec=0;
  35.      }
  36.     if(min==60)
  37.     {
  38.       hour+=1;
  39.       min=0;
  40.      }
  41.     if(hour==24)
  42.     {
  43.       hour=0;
  44.       day++;
  45.     }
  46.     if(month==1|month==3|month==5|month==7|month==8|month==10|month==12)
  47.     {
  48.       if(day==31)
  49.     {
  50.      day=0;
  51.      month++;
  52.     }
  53.     }
  54.     else
  55.     {
  56.       if(month==2)
  57.     {
  58.      if(day==29)
  59.      {
  60.       day=0;
  61.       month++;
  62.      }
  63.     }
  64.     else
  65.     {
  66.      if(day==30)
  67.      {
  68.       day=0;
  69.       month++;
  70.      }
  71.     }
  72.     }
  73.     if(month==12)
  74.     {
  75.       month=0;
  76.     year++;
  77.     }
  78.     speker(0,8);
  79.        showtime();
  80.   }
  81. }

  82. void _init_()
  83. {

  84.   //啟用且設置T0,定時50ms
  85.   TH0=(65536-50000)/256;
  86.   TL0=(65536-50000)%256;
  87.   EA=1;
  88.   ET0=1;
  89.   TMOD=0x01;
  90.   TR0=1;
  91. }
  92. void timer0() interrupt 1
  93. {
  94.   _init_();
  95.   t1++;

  96. }

  97. void settime(uint y,uint m,uint d,uint i,uint j,uint k)//設置初始時間函數:   k : j : i

  98. {
  99. year=y;
  100. month=m;
  101. day=d;
  102. sec=i;
  103. min=j;
  104. hour=k;

  105. }
  106. void speker(uint i,uint j)
  107. {
  108. if(hour==j&&min==i)
  109. {
  110.   while(min==min+1)//一分鐘后,鬧鐘停止
  111.   {
  112.    sp=1;
  113.    delay(20);
  114.    sp=0;
  115.   }

  116. }
  117. }
  118. void showtime()
  119. {
  120.   if((sec%10)<7&&(sec%10)>=0)
  121.   {//秒鐘顯示
  122.    sc=1;
  123.    P0=table[sec/10];
  124.    P2=0x06;
  125.    sc=0;
  126.   
  127.    sc=1;
  128.    P0=table[sec%10];
  129.    P2=0x07;
  130.    sc=0;
  131.   

  132.    //分鐘顯示
  133.    sc=1;
  134.    P0=table[min/10];
  135.    P2=0x03;
  136.    sc=0;
  137.   
  138.    sc=1;
  139.    P0=table[min%10];
  140.    P2=0x04;
  141.    sc=0;
  142.   
  143.    //時鐘顯示
  144.    sc=1;
  145.    P0=table[hour/10];
  146.    P2=0x01;
  147.    sc=0;
  148.   
  149.    sc=1;
  150.    P0=table[hour%10];
  151.    P2=0x0;
  152.    sc=0;
  153.    }
  154.   if((sec%10)>=7&&(sec%10)<=9)
  155.   {
  156.     //日期顯示
  157.     sc=1;
  158.    P0=table[day/10];
  159.    P2=0x06;
  160.    sc=0;
  161.   
  162.    sc=1;
  163.    P0=table[day%10];
  164.    P2=0x07;
  165.    sc=0;
  166.    //月份顯示
  167.    sc=1;
  168.    P0=table[month/10];
  169.    P2=0x03;
  170.    sc=0;
  171.   
  172.    sc=1;
  173.    P0=table[month%10];
  174.    P2=0x04;
  175.    sc=0;
  176.   //年份顯示
  177.    sc=1;
  178.    P0=table[year/10];
  179.    P2=0x01;
  180.    sc=0;

  181.    sc=1;
  182.    P0=table[year%10];
  183.    P2=0x00;
  184.    sc=0;
  185.   }
  186. }

  187. void delay(uint z)
  188. {
  189. uint x,y;
  190. for(x=10;x>=0;x--)
  191.   for(y=z;y>=0;y--);
  192. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲男人的天堂网站 | 一级片免费观看 | 精品久久99| 天天干天天玩天天操 | 成人免费在线视频 | 天堂精品 | 天天操天天摸天天干 | 日韩精品一区二区三区老鸭窝 | 亚洲成人网在线观看 | 91精品国产91综合久久蜜臀 | 99re热精品视频 | 精品久久久久久久久久久久久 | 亚洲精品免费视频 | 国产成人一区二区三区 | 久久久青草婷婷精品综合日韩 | 亚洲精品一二三区 | 91国内精精品久久久久久婷婷 | 久在线视频播放免费视频 | 伊人精品在线 | www.夜夜骑| 黄a大片 | 午夜免费福利片 | 成年免费大片黄在线观看岛国 | 精品免费国产一区二区三区 | 一区二区三区在线 | 欧 | 国产激情视频在线免费观看 | 国产精品久久久久久久久久久久午夜片 | 精品日韩电影 | 91社区在线观看高清 | 久久婷婷色 | 91欧美精品成人综合在线观看 | 欧美福利在线 | 日韩欧美精品一区 | 国产精品99久久久久久久vr | 日本一区二区视频 | 亚洲精品一 | 欧美日韩亚洲国产综合 | 午夜爽爽爽男女免费观看 | 国产一区二区欧美 | 黑人性hd| 国产乱码久久久久久 |