找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2591|回复: 0
打印 上一主题 下一主题
收起左侧

单片机音乐倒数计数器程序

[复制链接]
跳转到指定楼层
楼主
字符型LCD(16×2)显示器,显示格式为“TIME 分分:秒秒”。
⑵ 用4个按键操作来设置当前想要倒计数的时间。
   ⑶ 一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。
   ⑷ 程序执行后工作指示灯LCD闪动,表示程序开始执行,按下操作键K1~K4动作如下:
            ● K1---可调整倒计数的时间1~60分钟。
            ● K2---设置倒计数的时间为5分钟,显示“0500”。
            ● K3---设置倒计数的时间为10分钟,显示“1000”。
            ● K4--设置倒计数的时间为20分钟,显示“2000”
   ⑸ 复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1键,则在LCD上显示出设置画面。此时,若:
   ● 按K2键---增加倒计数的时间1分钟。
   ● 按K2键---减少倒计数的时间1分钟。
   ● 按K4键---设置完成。



单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define time 100
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. uint t,flag,flag0,flag1,flag2,flag3,flag4,flag5,minute,second=60;
  7. uchar num,j,i,k=0;
  8. uchar code table[]="TIME   00:00";
  9. uint code table1[]={64580,64684,64777,64820,64898,64968,65030};
  10. sbit key1=P3^2;
  11. sbit key2=P3^3;
  12. sbit key3=P3^4;
  13. sbit key4=P3^5;
  14. sbit P1_5=P2^5;
  15. sbit RS=P2^0;
  16. sbit RW=P2^1;
  17. sbit E=P2^2;
  18. sbit led_red=P1^0;
  19. void write_time(uint addr,uint date);
  20. /////////延时函数///////
  21. void delay(uint z)
  22. {
  23.         uint x,y;
  24.         for(x=z;x>0;x--)
  25.                 for(y=110;y>0;y--);
  26. }
  27. ///////延时1S////////////
  28. void delay1(void)
  29. {
  30.     uchar a,b,c;
  31.     for(c=13;c>0;c--)
  32.         for(b=247;b>0;b--)
  33.             for(a=142;a>0;a--);
  34.   
  35. }
  36. ////////1602写命令函数//////
  37. void write_com(uchar com)
  38. {
  39.         RS=0;
  40.         P0=com;
  41.         delay(5);
  42.         E=1;
  43.         delay(10);
  44.         E=0;
  45. }
  46. //////1602写数据函数//////
  47. void write_date(uchar date)
  48. {
  49.         RS=1;
  50.         P0=date;
  51.         delay(5);
  52.         E=1;
  53.         delay(10);
  54.         E=0;
  55. }
  56. //////按键1处理函数///////
  57. void KEY1()
  58. {
  59.     while(flag1)
  60.         {
  61.             if(key2==0)
  62.                 {
  63.                     delay(time);
  64.                         if(key2==0)
  65.                         {  
  66.                             if(minute<=60)
  67.                                 minute=minute+1;
  68.                                 write_time(7,minute);
  69.                         }
  70.                 }
  71.                 if(key3==0)
  72.                 {
  73.                     delay(time);
  74.                         if(key3==0)
  75.                         {
  76.                             if(minute>0)
  77.                         minute=minute-1;
  78.                                 write_time(7,minute);
  79.                         }
  80.                 }
  81.                 if(key4==0||key5==0)
  82.                 {
  83.                     delay(150);
  84.                         if(key4==0||key5==0)
  85.                         {
  86.                         flag1=0;
  87.                                 flag =1;
  88.                                 TR0=1;
  89.                         }
  90.                 }
  91.         }
  92. }
  93. //////按键2处理函数//////
  94. void KEY2()
  95. {
  96.     minute=5;
  97.         write_time(7,minute);
  98.         while(flag2)
  99.         {
  100.             if(key5==0)
  101.                     {
  102.                             delay(time);
  103.                                 if(key5==0)
  104.                                 {
  105.                                     flag2=0;
  106.                                         flag =1;
  107.                                         TR0=1;
  108.                                 }
  109.                         }
  110.         }
  111. }
  112. //////按键3处理函数//////
  113. void KEY3()
  114. {
  115.     minute=10;
  116.         write_time(7,minute);
  117.         while(flag3)
  118.         {
  119.             if(key5==0)
  120.                     {
  121.                             delay(time);
  122.                                 if(key5==0)
  123.                                 {
  124.                                     flag3=0;
  125.                                         flag =1;
  126.                                         TR0=1;
  127.                                 }
  128.                         }
  129.         }
  130. }
  131. //////按键4处理函数//////
  132. void KEY4()
  133. {
  134.     minute=20;
  135.         write_time(7,minute);
  136.         while(flag4)
  137.         {
  138.             if(key5==0)
  139.                     {
  140.                             delay(150);
  141.                                 if(key5==0)
  142.                                 {
  143.                                     flag4=0;
  144.                                         flag =1;
  145.                                         TR0=1;
  146.                                 }
  147.                         }
  148.         }
  149. }

  150. void write_time(uint addr,uint date)
  151. {
  152.     uint ge,shi;
  153.         ge=date%10;
  154.         shi=date/10;
  155.     write_com(0x80+addr);
  156.         write_date(0x30+shi);
  157.         write_date(0x30+ge);
  158.         if(addr==7&&date==0)
  159.             j=1;
  160.         if(j==1&&addr==10&&date==0)
  161.         {
  162.             flag0=1;
  163.             TR0=0;
  164.                 TR1=1;
  165.                 flag5=1;
  166.         }
  167.             
  168. }

  169. //////初始化函数//////
  170. void init()
  171. {
  172.     P1=0xff;
  173.         RW=0;
  174.         write_com(0x38);
  175.         write_com(0x0c);
  176.         write_com(0x06);
  177.         write_com(0x80);
  178.         TMOD=0x11;
  179.         TH0=(65536-50000)/256;
  180.         TL0=(65536-50000)%256;
  181.         TH1=0xfc;
  182.         TL1=0x44;
  183.         ET1=1;
  184.         ET0=1;
  185. //        TR1=1;
  186. //        TR0=1;
  187.         EA=1;
  188.         flag0=1;
  189.         for(num=0;num<12;num++)
  190.         {
  191.                 write_date(table[num]);
  192.                 delay(20);
  193.         }
  194. }

  195. void start()
  196. {
  197.         if(key1==0)
  198.         {       
  199.             delay(time);
  200.                 if(key1==0)
  201.                 {       
  202.                     flag0=0;
  203.                     flag1=1;
  204.                     KEY1();
  205.                 }
  206.         }
  207.         if(key2==0)
  208.         {
  209.                 delay(time);
  210.                 if(key2==0)
  211.                 {
  212.                     flag0=0;
  213.                     flag2=1;
  214.                         KEY2();
  215.                 }
  216.         }
  217.         if(key3==0)
  218.         {
  219.                 delay(time);
  220.                 if(key3==0)
  221.                 {
  222.                         flag0=0;
  223.                     flag3=1;
  224.                         KEY3();
  225.                 }
  226.         }
  227.         if(key4==0)
  228.         {
  229.                 delay(150);
  230.                 if(key4==0)
  231.                 {
  232.                     flag0=0;
  233.                     flag4=1;
  234.                         KEY4();
  235.                 }
  236.         }
  237. }

  238. void write_time0()
  239. {
  240.         minute=minute-1;
  241.         write_time(7,minute);
  242.         write_time(10,59);
  243.         flag=0;   
  244. }

  245. void counter()
  246. {
  247.         if(t==20)
  248.         {
  249.                 led_red=led_red^1;
  250.                 if(flag==1)
  251.                 write_time0();
  252.                 t=0;
  253.             second=second-1;

  254.                 write_time(10,second);
  255.                 if(k==1&&second==59)
  256.                 {
  257.                     if(minute>0)                 
  258.                           minute=minute-1;
  259.                         write_time(7,minute);
  260.                 }
  261.                 if(second==0)
  262.                 {       
  263.                     k=1;
  264.                         second=60;
  265.                 }
  266.         }
  267. }

  268. int main()
  269. {
  270.     init();
  271.     while(1)
  272.         {
  273.             while(flag0)
  274.                 start();
  275.                 counter();
  276.                 while(flag5)
  277.                 {
  278.                         delay1();
  279.                     i++;
  280.                     if(i>7)
  281.                             i=0;
  282.                 }
  283.         }
  284.         return 0;
  285. }

  286. void inter0()  interrupt 1
  287. {
  288.         TH0=(65536-50000)/256;
  289.         TL0=(65536-50000)%256;
  290.         t++;
  291. }

  292. void initer1() interrupt 3
  293. {
  294.         TH1=table1[i]/256;
  295.         TL1=table1[i]%256;
  296.         P1_5=~P1_5;
  297.         if(key5==0)
  298.         {
  299.             delay(100);
  300.                 if(key5==0)
  301.                 {
  302.                   TR1=0;
  303.                         flag5=0;
  304.                         k=0;
  305.                         j=0;
  306.                 }
  307.         }
  308. }
复制代码



评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表