由于本人单片机只是业余爱好,一直没发帖,最近不发贴就封号,不得已发个贴,望大家海涵
单片机是stc15f104,按键功能就是3段调光
*****************************************************
*******************************************************/
#include<STC15F104E.h>
#include <intrins.h>
#define uchar unsigned char
sbit k1 = P3^4;
sbit pwm1=P3^2;
uchar keycom,tm0cm;
uchar keyda;
uchar pwmda;
void pwmsz (void);
/**************************keydelay******************/
void keydelay (void)
{
uchar i=200;
while ( i--);
}
/**********************keyjc***************************/
uchar keyjc ( void )
{ uchar i,x;
if (k1==0){for (i=40;i>0;i--){if (k1==1) {x=0;goto ned;}
keydelay();} while(!k1); x=1;}else x=0; ned: return (x); }
/************************************keyexe************/
void keyexe (void)
{ uchar i;
i=keyjc();
if(i==1){ keyda++; pwmsz();if(keyda>3) keyda=0;}
}
/*****************************pwmsz****************/
void pwmsz (void)
{ if(keyda==0) pwmda=10;
if(keyda==1) pwmda=83;
if(keyda==2) pwmda=168;
if(keyda==3) pwmda=250;
}
/*******************************iosz*****************/
void iosz (void)
{ P3M1=0x10; //设置p34为高阻输入
P3M0=0x04; //设置p32为推挽输出
}
/***************************tm0sz*******************/
void tm0sz ( void)
{
//AUXR=0XC0;
TCON =0x30; //开TM0中断
//TMOD =0x03; // 设置tm0,tm1为8位定时器
IE=0x82;//开全局中断
}
/*************************************tm0中断********************/
void tm0pwm () interrupt 1
{
if(tm0cm==0)
{ TL0=pwmda; tm0cm=1;
if(keyda==0) pwm1=0;
else pwm1=1;
goto end;
}
if(tm0cm==1)
{ TL0=255-pwmda; tm0cm=0;
if(keyda==3) pwm1=1;
else pwm1=0;
goto end;
}
end: TH0=0xff;
_nop_();
}
/*************************************/
void main(void)
{
iosz();
tm0sz();
while (1)
{ keyexe(); }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
应该是if(i==1){ keyda++; if(keyda>3) keyda=0;pwmsz();}
一周热门 更多>