完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以下代码是AD转换使光敏电阻阻值在数码管上显示,如果阻值大于100,则蜂鸣器响。。。。但是写完代码调试后发现蜂鸣器确实在响,但是响的声音非常微小,没有独立实现蜂鸣器时响的声音大,麻烦各位帮忙看看哪里出现了问题?
//光敏电阻报警设置 //AD转换,光敏电阻阻值在数码管上显示 #include #include //---重定义关键词---// #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define GPIO_DIG P0 //---定义使用的IO口---// ***it CLK = P3^0; //时钟 ***it CS = P3^1; //片选 ***it DIN = P3^2; //输入 ***it DOUT = P3^3; //输出 ***it beep=P2^6; uint Read_AD_Data(uchar cmd); uint SPI_Read(void); void SPI_Write(uchar dat); //--定义全局变量--// unsigned char code DIG_CODE[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char DisplayData[8]; //用来存放要显示的8位数的值 void DigDisplay(void); void delay() { char i,j; for(i; i > 0; i--) for(j = 200; j > 0; j--); } void SPI_Start(void) { CLK = 0; CS = 1; DIN = 1; CLK = 1; CS = 0; } /**************************************************************************** *函数名:SPI_Write *输 入:dat:写入数据 *输 出:无 *功 能:使用SPI写入数据 ****************************************************************************/ void SPI_Write(uchar dat) { uchar i; CLK = 0; for(i=0; i<8; i++) { DIN = dat >> 7; //放置最高位 dat <<= 1; CLK = 0; //上升沿放置数据 CLK = 1; } } /**************************************************************************** *函数名:SPI_Read *输 入:无 *输 出:dat:读取 到的数据 *功 能:使用SPI读取数据 ****************************************************************************/ uint SPI_Read(void) { uint i, dat=0; CLK = 0; for(i=0; i<12; i++) //接收12位数据 { dat <<= 1; CLK = 1; CLK = 0; dat |= DOUT; } return dat; } /**************************************************************************** *函数名:Read_AD_Data *输 入:cmd:读取的X或者Y *输 出:endValue:最终信号处理后返回的值 *功 能:读取触摸数据 ****************************************************************************/ uint Read_AD_Data(uchar cmd) { uchar i; uint AD_Value; CLK = 0; CS = 0; SPI_Write(cmd); for(i=6; i>0; i--); //延时等待转换结果 CLK = 1; //发送一个时钟周期,清除BUSY _nop_(); _nop_(); CLK = 0; _nop_(); _nop_(); AD_Value=SPI_Read(); CS = 1; return AD_Value; } void main(void) { unsigned char altemp=100; uint temp,count; while(1) { if(count==50) { count=0; // temp = Read_AD_Data(0x94); // AIN0 电位器 // temp = Read_AD_Data(0xD4); // AIN1 热敏电阻 temp = Read_AD_Data(0xA4); // AIN2 光敏电阻 // temp = Read_AD_Data(0xE4); // AIN3 外部输入 } count++; DisplayData[0]=DIG_CODE[0]; DisplayData[1]=DIG_CODE[0]; DisplayData[2]=DIG_CODE[0]; DisplayData[3]=DIG_CODE[0]; DisplayData[4]=DIG_CODE[temp%10000/1000]; DisplayData[5]=DIG_CODE[temp%1000/100]; DisplayData[6]=DIG_CODE[temp%100/10]; DisplayData[7]=DIG_CODE[temp%10/1]; DigDisplay(); if(temp>altemp) { beep=1; delay(); beep=0; //delay(); } else beep=0; } } void DigDisplay(void) { unsigned char i; unsigned int j; for(i=0;i<8;i++) { P1=table1[i]; GPIO_DIG=DisplayData[i];//发送段码 j=50; //扫描间隔时间设定 while(j--); GPIO_DIG=0x00;//消隐 } } |
|
相关推荐
9个回答
|
|
在程序没有变动的情况下,声音小应该找硬件的问题把
|
|
|
|
程序部分我自己修改了 但是要把蜂鸣器部分独自拿出来实现 声音是正常的 要是加入到以上程序里发出的声音就不正常了 |
|
|
|
这样说明就是你硬件线路的问题 |
|
|
|
蜂鸣器没有连续发声,中间有中断
|
|
|
|
|
|
|
|
驱动无源蜂鸣器??只玩过555驱动 单片机程序不懂!!!!!坑呀!
|
|
|
|
很好的资料,值得学习
|
|
|
|
很好的资料,值得学习
|
|
|
|
P2.6高电平驱动不足!看看硬件电路!!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12012 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:09 , Processed in 1.092641 second(s), Total 85, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号