代码pwm.docx

上传人:b****5 文档编号:3275762 上传时间:2022-11-21 格式:DOCX 页数:9 大小:16.64KB
下载 相关 举报
代码pwm.docx_第1页
第1页 / 共9页
代码pwm.docx_第2页
第2页 / 共9页
代码pwm.docx_第3页
第3页 / 共9页
代码pwm.docx_第4页
第4页 / 共9页
代码pwm.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

代码pwm.docx

《代码pwm.docx》由会员分享,可在线阅读,更多相关《代码pwm.docx(9页珍藏版)》请在冰豆网上搜索。

代码pwm.docx

代码pwm

//头文件

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineTHCO0xEE-------------------------------------------------------定时器赋初值

#defineTLCO0x3F--------------------------------------------------------定时器赋初值

#defineAD_CHANNEL0----------------------------------------------------AD通道

unsignedintvx=10;

unsignedcharcodeDuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76};//段选码

unsignedcharData_Buffer[6]={0,0,0,0};----------------------------------------数据缓冲区

unsignedcharHour=7,Min=0,Sec=20;//时钟时间

unsignedintflag=0;---------------------------------------------------------------1分时间到标志

bitAD_flag=0;

bitSOS_flag=0;

chartp=0;

unsignedintv;

unsignedinttemp1=600;

unsignedcharMode=0;

unsignedcharK=1;

bitflag1=0;

//vx=5在用于12864LCD的LED背光调整时上电为半亮度状态,可根据自己的用途及要求任意设定

sbitKEY_H=P2^2;---------------------------------------------------------------定义按键

sbitKEY_L=P2^1;---------------------------------------------------------------定义按键

sbitMODE=P2^0;---------------------------------------------------------------定义按键

sbitP34=P3^4;-------------------------------------------------------------------定义按键

sbitP35=P3^5;-------------------------------------------------------------------定义按键

sbitP36=P3^6;-------------------------------------------------------------------定义按键

sbitP37=P3^7;-------------------------------------------------------------------定义按键

sbitP14=P1^4;-------------------------------------------------------------------定义按键

sbitP24=P2^4;-------------------------------------------------------------------定义按键

sbitP25=P2^5;-------------------------------------------------------------------定义按键

sbitP26=P2^6;-------------------------------------------------------------------定义按键

sbitP27=P2^7;-------------------------------------------------------------------定义按键

sbitP32=P3^2;-------------------------------------------------------------------定义按键

/*******************************************************************************/

voidPWM_init(void)

{//PWM初始化函数

CMOD=0x02;//设置PCA定时器系统时钟SYclk/2

CL=0x00;

CH=0x00;

CCAPM1=0x42;//PWM1设置PCA工作方式为PWM方式(01000010)8位pwm输出无中断

CCAP1L=0xff;//设置PWM1初始值与CCAP0H相同

CCAP1H=0xff;//PWM1初始时为0

//启动PCA定时器

}

/******************************************************************************/

voidPWM1_set(unsignedinta)

{//PWM1占空比设置函数

CCAP1L=a;//设置值直接写入CCAP1L

CCAP1H=a;//设置值直接写入CCAP1H

}

/*****************************************************************************/

voidDelayM(unsignedinta){//延时函数1mS/次(用于1T单片机)

unsignedcharn,i,j;

while(--a!

=0){

for(n=1;n>0;n--)

for(j=222;j>0;j--)

for(i=12;i>0;i--);

}}

/****************************************************************************/

/******************************************************************************/

voidmanual_control()//手动控制

{PWM1_set(vx*25);----------------------------------------------------------数字24是配合vx调试取得的,此时vx的赋值范围约为1-10对应最暗-最亮

//--------减调整---------//

if(KEY_L==0){

DelayM(20);//延时20毫秒消抖动

if(KEY_L==0){//如果20SM后KEY_L还是0状态则确认下调键是按下的

vx--;

if(vx<1){vx=10;}

//如果设定vx=10,将语句改为if(vx<1){vx=10;}则为单按键循环控制,则可去除加调整控制部分

}

while(KEY_L==0);//等待键松开

}

//--------加调整---------//

if(KEY_H==0){

DelayM(20);

if(KEY_H==0)

{

vx++;

if(vx>=11){vx=1;}

}

while(KEY_H==0);

}

}

/******************************************************************************/

voiddispaly1()

{flag=0;

Data_Buffer[0]=0;

Data_Buffer[1]=vx;

Data_Buffer[2]=0;

Data_Buffer[3]=0;

}

/******************************************************************************/

voida1()

{

P34=0,P37=1,manual_control();dispaly1();CR=1;

}

/***********************************/

unsignedintAD_Sample(unsignedcharchannel)

{

uinti,q=0;

unsignedinttemp;

for(i=0;i<10;i++)

{

tp=0;

ADC_RES=0;

ADC_RESL=0;

ADC_CONTR=0x88|channel;//选择AD当前通道,并启动转换

while(!

tp)--------------------------------------------------------------------等待转换完毕

{

tp=0x10;

tp&=ADC_CONTR;

}

ADC_CONTR&=0xe7;

temp=(ADC_RES&0x03)*256+ADC_RESL;

q=q+temp;

}

temp=q/10;

returntemp;

}

////////////////////////////////////

voida2()

{if(flag1==1)

{flag1=0;

v=AD_Sample(AD_CHANNEL);

Data_Buffer[0]=v/1000;

Data_Buffer[1]=v/100%10;

Data_Buffer[2]=v/10%10;

Data_Buffer[3]=v%10;

}

if(v<500)

{PWM1_set(25);

}

if(v>510)

{PWM1_set(0xff);

}

}

voidAD_init()

{

P1M0=1;//P10设为A/D转换功以能

P1M1=1;

P1ASF=0X01;//通道选择

AUXR1|=0x04;

ADC_CONTR=0x80;//打开A/D转换器电源

}

/

/******************************/

voidSOS_LED()//呼吸灯子函数

{unsignedinti;

for(i=100;i<240;i=i+5)

{

PWM1_set(i);

DelayM(200);

}

for(i=240;i>100;i=i-5)

{

PWM1_set(i);

DelayM(200);

}

}

/**************************/

voidmain(void)

{

staticunsignedintflag1=0;

unsignedchari;

TMOD=0x11;//定时器0初始化

TH0=THCO;

TL0=TLCO;

TR0=1;

ET0=1;

EA=1;

KEY_H=1;KEY_L=1;

PWM_init();

while

(1)

{if(MODE==0){

DelayM(20);//延时20毫秒消抖动

if(MODE==0){//如果20SM后KEY_L还是0状态则确认下调键是按下的

flag1++;

if(flag1>=4){flag1=0;}

//如果设定vx=10,将语句改为if(vx<1){vx=10;}则为单按键循环控制,则可去除加调整控制部分

}

while(MODE==0);//等待键松开

}

switch(flag1)

{

case0:

a1();break;

case1:

PWM_init();CR=1;P37=0;P36=1;SOS_LED();break;

case2:

CR=0,CL=0,CH=0;break;

case3:

AD_init();PWM_init();CR=1;a2();break;

}

}

}

voidtimer0()interrupt1

{staticunsignedcharcount=0;

staticunsignedcharAD_count=0;

staticunsignedcharBit=0;//静态变量,退出程序后,值保留

TH0=THCO;

TL0=TLCO;

if(flag==1)

count++;

if(count>=200)//秒计时,定时器定时5ms,计200次为一秒

{

count=0;

Sec--;}

if(Sec==0){Sec=20,CR=0,CCON=0;

CL=0;//复位PCA的计数器

CH=0;

flag=0;}

AD_count++;

if(AD_count>=100)//半S时间到

{

AD_count=0;

flag1=1;

}

Bit++;

if(Bit>=4)Bit=0;

P24=P25=P26=P27=1;//先关位码

P0=Duan[Data_Buffer[Bit]];//开段码

if(count<100&&Bit==1)P0|=0x80;//0.5S中间小数点亮,之后灭,不断循环

switch(Bit)//送位码

{

case0:

P24=0;break;

case1:

P25=0;break;

case2:

P26=0;break;

case3:

P27=0;break;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1