找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机计数蜂鸣器程序

[复制链接]
跳转到指定楼层
楼主
程序实现仿真后点击开关读秒计数,读秒结束后蜂鸣器响声报数,hex文件已置入压缩包内,部分源码如下

  1. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  2. #include "lcd.h"

  3. #define uchar unsigned char
  4. #define        uint unsigned int

  5. typedef unsigned int u16;          //对数据类型进行声明定义
  6. typedef unsigned char u8;
  7. typedef unsigned char u9;
  8. int q;
  9. uchar m=0;
  10. /*******************************************************************************
  11. * 函 数 名         :delay
  12. * 函数功能                   :延时函数
  13. * 输    入         : 无
  14. * 输    出         : 无
  15. *******************************************************************************/
  16. void delay(uchar p)
  17. {
  18.     uchar a,b;
  19.     for(;p>0;p--)
  20.     for(a=600;a>0;a--)
  21.     for(b=600;b>0;b--);
  22. }

  23. /*******************************************************************************
  24. * 函 数 名         : lcd
  25. * 函数功能                   :
  26. * 输    入         : 无
  27. * 输    出         : 无
  28. *******************************************************************************/
  29. void lcd()
  30. {

  31.         LcdInit();
  32.         LcdWriteData(q/100+0x30);
  33.     LcdWriteData(q/10%10+0x30);
  34.         LcdWriteData(q%10+0x30);        
  35.         m++;        
  36. }
  37.         
  38. void main(void)
  39. {        q=0;
  40.     IT0=1;//跳变沿出发方式(下降沿)
  41.         EX0=1;//打开INT0的中断允许。        
  42.         EA=1; //打开总中断
  43. while(1)
  44.          {        
  45.            int i;                                       
  46.              if(k1==0)                  //检测按键K1是否按下
  47.               {        
  48.                          if(k1==0)         //再次判断按键是否按下
  49.                        {
  50.                                  for(i=0;i<1000;i++)
  51.                                    {  
  52.                                      q++;
  53.                              lcd();
  54.                                          delay(10);
  55.                                    }
  56.                        }
  57.                  while(!k1);         //检测按键是否松开
  58.               }                                                  
  59.       }               
  60. }
  61.   void alarm(uchart)
  62.   {
  63.    uchar i,j;
  64.    for(i=0;i<100;i++)
  65.    {
  66.            beepIO=!beepIO;
  67.         for(j=0;j<100;j++);
  68.    }
  69.   }
  70. /*******************************************************************************
  71. * 函 数 名         :zz
  72. * 函数功能                   :响声计数
  73. * 输    入         : 无
  74. * 输    出         : 无
  75. *******************************************************************************/

  76.   void zz()
  77.   {
  78.       unsigned int x,n;
  79.           n=m;
  80.       for(x=0;x<n;x++)
  81.            {
  82.            alarm(90) ;
  83.              delay(20);         
  84.            }
  85.            beepIO=1;
  86.   }
  87. void T0int() interrupt 0
  88. {  
  89.          
  90.             while(1)
  91.          {         
  92.                      {
  93.                        if(zd==0)                  //检测按键K1是否按下
  94.                        {        
  95.         
  96.                                if(zd==0)         //再次判断按键是否按下
  97.                                {
  98.                                    zz();
  99.                            
  100.                                }
  101.                                while(!zd);         //检测按键是否松开
  102.                        }               
  103.              }                                 
  104.                 }        
  105. }
复制代码

程序源码.zip (80.69 KB, 下载次数: 4)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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