⑴ 单片机c语言PWM的典型程序谢谢
/ 利用定时器控制产生占空比可变的 PWM 波
// 按K1,PWM值增加,则占空比减小,电机减速。
// 按K2,PWM值减小,则占空比增加,电机加速。
// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
/*********************************************************/
#include<reg51.h>
#include<intrins.h>
sbit K1 =P1^4 ; //PWM值增加键
sbit K2 =P1^5 ; //PWM值减少键
sbit BEEP =P3^7 ; //蜂鸣器
unsigned char PWM=0x7f ; //赋初值
void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);
/*********************************************************/
void main()
{
P1=0xff;
TMOD=0x21 ;
TH0=0xfc ; //1ms延时常数
TL0=0x66 ; //频率调节
TH1=PWM ; //脉宽调节
TL1=0 ;
EA=1;
ET0=1;
ET1=1;
TR0=1 ;
while(1)
{
do{
if(PWM!=0xff)
{PWM++ ;delayms(10);}
else Beep() ;
}
while(K1==0);
do{
if(PWM!=0x02)
{PWM-- ;delayms(10);}
else Beep() ;
}
while(K2==0);
}
}
/*********************************************************/
// 定时器0中断服务程序 (频率)
/*********************************************************/
void timer0() interrupt 1
{
TR1=0 ;
TH0=0xfc ;
TL0=0x66 ;
TH1=PWM ;
TR1=1 ;
P0=0x00 ; //启动输出
}
/*********************************************************/
// 定时器1中断服务程序 (脉宽)
/*********************************************************/
void timer1() interrupt 3
{
TR1=0 ;
P0=0xff ; //结束输出
}
/*********************************************************/
//蜂鸣器子程序
/*********************************************************/
void Beep()
{
unsigned char i ;
for (i=0 ;i<100 ;i++)
{
delay(100) ;
BEEP=!BEEP ; //Beep取反
}
BEEP=1 ; //关闭蜂鸣器
delayms(100);
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delay(unsigned char t)
{
while(t--) ;
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)
{
unsigned char i ;
while(ms--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}
/*********************************************************/
⑵ C语言如何把它翻译成中文
这不叫“翻译”。你的标题应该改为“请帮我给下面C程序添加注释,看不懂”。
#include"Wire.h"
#include"I2Cdev.h"
#include"ADXL345.h"
ADXL345accel;//声明类型为ADXL345的结构体,用于加速度传感器配置
int16_tax,ay,az;
#defineLED_PIN13
boolblinkState=false;//初始不闪烁
voidsetup(){//初始化函数
Wire.begin();//初始化硬件部分
Serial.begin(38400);//初始化串口
Serial.println("InitializingI2Cdevices...");//串口输出调试信息
accel.initialize();//初始化加速度传感器
Serial.println("Testingdeviceconnections...");//串口输出调试信息
Serial.println(accel.testConnection()?"ADXL345connectionsuccessful":"ADXL345connectionfailed");//测试加速度传感器连接情况,并通过串口分别输出调试信息
pinMode(LED_PIN,OUTPUT);//指示灯管脚配置为输出,准备闪烁
}
voidloop(){
accel.getAcceleration(&ax,&ay,&az);//从加速度传感器读取三轴值
Serial.print("accel: ");//串口输出调试信息
Serial.print(ax);Serial.print(" ");//串口输出x轴加速度值
Serial.print(ay);Serial.print(" ");//串口输出y轴加速度值
Serial.println(az);//串口输出z轴加速度值
blinkState=!blinkState;//闪烁状态逻辑翻转
digitalWrite(LED_PIN,blinkState);//指示灯输出翻转,实现闪烁
}
⑶ c语言gsensor急加速算法
1、加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。
该数值包含地心引力的影响,单位是m/s^2。
将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。
将手机朝下放在桌面上,z轴为-9.81。
将手机向左倾斜,x轴为正值。
将手机向右倾斜,x轴为负值。
将手机向上倾斜,y轴为负值。
将手机向下倾斜,y轴为正值。
加速度羡肢衫传感器可能是最为成熟的一种mems产品,市场上的加速度传感器种类很多。
手机中常用的加速度传感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。
这些传感器一般提供±2G至±16G的加速度测量范围,采用I2C或SPI接口和MCU相连,数据精度小于16bit。
2、例程:
{
privatestaticfinalStringTAG=MainActivity.class.getSimpleName();
;
兄腔privateSensormSensor;
privateTextViewtextviewX;
privateTextViewtextviewY;
privateTextViewtextviewZ;
privateTextViewtextviewF;
privateintmX,mY,mZ;
privatelonglasttimestamp=0;
饥禅CalendarmCalendar;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textviewX=(TextView)findViewById(R.id.textView1);
textviewY=(TextView)findViewById(R.id.textView3);
textviewZ=(TextView)findViewById(R.id.textView4);
textviewF=(TextView)findViewById(R.id.textView2);
mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//TYPE_GRAVITY
if(null==mSensorManager){
Log.d(TAG,"");
}
//参数三,检测的精准度
mSensorManager.registerListener(this,mSensor,
SensorManager.SENSOR_DELAY_NORMAL);//SENSOR_DELAY_GAME
}
@Override
publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){
}
@Override
publicvoidonSensorChanged(SensorEventevent){
if(event.sensor==null){
return;
}
if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
intx=(int)event.values[0];
inty=(int)event.values[1];
intz=(int)event.values[2];
mCalendar=Calendar.getInstance();
longstamp=mCalendar.getTimeInMillis()/1000l;//1393844912
textviewX.setText(String.valueOf(x));
textviewY.setText(String.valueOf(y));
textviewZ.setText(String.valueOf(z));
intsecond=mCalendar.get(Calendar.SECOND);//53
intpx=Math.abs(mX-x);
intpy=Math.abs(mY-y);
intpz=Math.abs(mZ-z);
Log.d(TAG,"pX:"+px+"pY:"+py+"pZ:"+pz+"stamp:"
+stamp+"second:"+second);
intmaxvalue=getMaxValue(px,py,pz);
if(maxvalue>2&&(stamp-lasttimestamp)>30){
lasttimestamp=stamp;
Log.d(TAG,"sensorisMoveorchanged....");
textviewF.setText("检测手机在移动..");
}
mX=x;
mY=y;
mZ=z;
}
}
/**
*获取一个最大值
*
*@parampx
*@parampy
*@parampz
*@return
*/
publicintgetMaxValue(intpx,intpy,intpz){
intmax=0;
if(px>py&&px>pz){
max=px;
}elseif(py>px&&py>pz){
max=py;
}elseif(pz>px&&pz>py){
max=pz;
}
returnmax;
}
}
⑷ 函数需要计算大量的sin与cos, 请问大神如何加速(c语言版)
就是用查表法,事先计算好查找表,比如说我的应用要求精确到1度,就建2个这样的表。
cosT[360] = {}
sinT[360]= {}
然后要计算的时候直接把你要计算的角度转换成最接近这个角度的整数,查表即可。
如果要更高的精度,就建更大的查找表
⑸ C语言数列如何加速太慢
#include<stdio.h>
unsignedintFibonacci(intn);
intmain(void){
intn;
while(scanf("%d",&n),n>0){
printf("%u ",Fibonacci(n));
}
return0;
}
unsignedintFibonacci(intn){
if(n<=0)return0;
if(n==1||n==2)return1;
else{
inta[2]={1,1},i=3;
while(i<=n){
a[i%2]=a[i%2]+a[(i-1)%2];
i++;
}
returna[(i-1)%2];
}
}
其实这不需要递归,稍微变一下算法就行了。另外,你的printf里的格式字符串错了,应该是"%u"而不是"%d"。