设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 1725|回复: 1
收起左侧

基于STC15F104E的超声波随机频率噪音发生器,通过硬件寄存器进行控制IO口输出频率。

[复制链接]
发表于 2017-7-2 16:47:08 | 显示全部楼层 |阅读模式

  1. /*
  2. 基于STC15F104E的超声波随机频率噪音发生器,通过硬件寄存器进行控制IO口输出频率。
  3. By:LscmunaixMG 2017-07-02
  4. */
  5. #include "reg51.h"
  6. #include "intrins.h"
  7. //随机数算法相关变量
  8. unsigned char a=0;unsigned char b=0;unsigned char c=0;
  9. unsigned char d=0;unsigned char e=0;unsigned char f=0;
  10. unsigned char g=0;unsigned char h=0;unsigned char i=0;


  11. #define FOSC 12000000L //晶振频率
  12. sfr CLK_DIV     = 0x97;
  13. sfr AUXR      = 0x8e;               //辅助特殊功能寄存器
  14. sfr INT_CLKO  = 0x8f;               //唤醒和时钟输出功能寄存器
  15. sbit T1CLKO   = P3^5;               //蜂鸣器连接VCC和P3.5 不同型号的可能会有区别
  16. void delay(void)   //误差 -0.000000000001us
  17. {
  18.     unsigned char a,b,c;
  19.     for(c=244;c>0;c--)
  20.         for(b=8;b>0;b--)
  21.             for(a=152;a>0;a--);
  22.     _nop_();  //if Keil,require use intrins.h
  23.     _nop_();  //if Keil,require use intrins.h
  24. }


  25.         unsigned char rand8(){ //随机数算法

  26.                 b=(c+3)*3;c=(d-3)*3;d=(e+3)*3;e=(f-3)*3;
  27.                 f=(g+3)*3;g=(h-3)*3;h=(i+3)*3;i=(b-3)*3;

  28.         if(b > 127) c = c^127;
  29.         if(c < 127) d = d^127;
  30.         if(d > 127) e = e^127;
  31.         if(e < 127) f = f^127;
  32.         if(f > 127) g = g^127;
  33.         if(g < 127) h = h^127;
  34.         if(h > 127) i = i^127;
  35.         if(i < 127) b = b^127;

  36.                 a=b^c^d^e^f^g^h^i;
  37.                
  38.                



  39.                 return a;

  40.         }

  41.         unsigned long rand32(){ //取长随机数
  42.         unsigned long r=0;
  43.                 r|=rand8();
  44.                 r|=rand8()<<8;
  45.                 r|=rand8()<<16;
  46.                 r|=rand8()<<24;
  47.                 return r;
  48.         }

  49. void beep(unsigned long hz){ //蜂鸣器鸣叫

  50.     TMOD = 0x00;                    //设置定时器为模式1(16位自动重装载)
  51.     TMOD &= ~0x40;                  //C/T1=0, 对内部时钟进行时钟输出
  52.     TL1 = (65536-FOSC/2/hz);                 //初始化计时值
  53.     TH1 = (65536-FOSC/2/hz) >> 8;
  54.     INT_CLKO = 0x02;
  55.     TR1 = 1;  //开始计数


  56.        
  57.         delay();//延迟
  58.        
  59. }



  60. void main(){
  61. unsigned long hz=0;  //当前频率
  62. unsigned long min=20000; //最小频率 20k
  63. unsigned long max=100000; //最大频率 100k
  64. bit n=0; //频率加还是减
  65. AUXR |= 0x40;
  66.     while (1){
  67.         hz=rand32()%(max-min+1)+min; //随机范围取频率
  68.         beep(hz); //鸣叫

  69.                





  70.        
  71.         }
  72. }



复制代码

发表于 2017-7-3 18:22:34 | 显示全部楼层
现在还没接触单片机,只能单纯的四处暖(水)贴。消灭零回复。
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-29 19:36 , Processed in 0.375021 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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