1、代码pwm/头文件#include #include#define uchar unsigned char#define uint unsigned int #define THCO 0xEE-定时器赋初值#define TLCO 0x3F-定时器赋初值#define AD_CHANNEL 0-AD 通道unsigned int vx=10;unsigned char code Duan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76;/段选码unsigned char D
2、ata_Buffer6=0,0,0,0;-数据缓冲区unsigned char Hour=7,Min=0,Sec=20; /时钟时间unsigned int flag=0; -1分时间到标志bit AD_flag=0;bit SOS_flag=0;char tp=0;unsigned int v;unsigned int temp1=600;unsigned char Mode=0;unsigned char K=1;bit flag1=0;/vx=5在用于12864LCD的LED背光调整时上电为半亮度状态,可根据自己的用途及要求任意设定sbit KEY_H=P22; -定义按键sbit KE
3、Y_L=P21; -定义按键sbit MODE=P20; -定义按键sbit P34=P34; -定义按键sbit P35=P35; -定义按键sbit P36=P36; -定义按键sbit P37=P37; -定义按键sbit P14=P14; -定义按键sbit P24=P24; -定义按键sbit P25=P25; -定义按键sbit P26=P26; -定义按键sbit P27=P27; -定义按键sbit P32=P32; -定义按键/*/void PWM_init (void)/PWM初始化函数CMOD=0x02; /设置PCA定时器 系统时钟 SYclk/2 CL=0x00; C
4、H=0x00;CCAPM1=0x42; /PWM1设置PCA工作方式为PWM方式(0100 0010) 8位pwm输出无中断 CCAP1L=0xff; /设置PWM1初始值与CCAP0H相同 CCAP1H=0xff; / PWM1初始时为0 /启动PCA定时器/*/void PWM1_set (unsigned int a)/PWM1占空比设置函数CCAP1L=a; /设置值直接写入CCAP1LCCAP1H=a; /设置值直接写入CCAP1H/*/void DelayM(unsigned int a)/延时函数 1mS/次(用于1T单片机) unsigned char n,i,j;while(
5、-a!=0) for(n=1;n0;n-) for(j=222;j0;j-) for(i=12;i0;i-); /*/*/void manual_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(vx1)vx=10;/如果设定vx=10,将语句改为if(vx=11)vx=1; while(KEY_H = 0);
6、 /*/void dispaly1() flag=0 ; Data_Buffer0=0;Data_Buffer1=vx;Data_Buffer2=0; Data_Buffer3=0;/*/void a1() P34=0,P37=1,manual_control(); dispaly1();CR=1;/*/unsigned int AD_Sample(unsigned char channel) uint i,q=0; unsigned int temp; for(i=0;i10;i+) tp=0; ADC_RES=0; ADC_RESL=0; ADC_CONTR=0x88|channel;/选
7、择AD当前通道,并启动转换 while(!tp) -等待转换完毕 tp=0x10; tp&=ADC_CONTR; ADC_CONTR&=0xe7; temp=(ADC_RES&0x03)*256+ADC_RESL; q=q+temp; temp=q/10; return temp;/ void a2() if(flag1=1) flag1=0; v=AD_Sample(AD_CHANNEL); Data_Buffer0=v/1000; Data_Buffer1=v/100%10; Data_Buffer2=v/10%10; Data_Buffer3=v%10; if(v510) PWM1_se
8、t(0xff); void AD_init() P1M0=1; /P10设为A/D转换功以能 P1M1=1; P1ASF=0X01; /通道选择 AUXR1|=0x04; ADC_CONTR=0x80; /打开A/D转换器电源/*/void SOS_LED() /呼吸灯子函数 unsigned int i;for(i = 100;i 100;i=i-5) PWM1_set(i); DelayM(200); /*/void main(void) static unsigned int flag1=0; unsigned char i; TMOD=0x11; /定时器0初始化TH0=THCO;TL
9、0=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=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=DuanData_BufferBit; /开段码 if(count100&Bit=1)P0|=0x80;/0.5S中间小数点亮,之后灭,不断循环 switch(Bit) /送位码 case 0: P24=0;break; case 1: P25=0;break; case 2: P26=0;break; case 3: P27=0;break;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1