当前位置:文档之家› 用合泰单片机控制2个LED亮度,有51的程序。然后移植到了合泰单片机上 功能都一样的

用合泰单片机控制2个LED亮度,有51的程序。然后移植到了合泰单片机上 功能都一样的

如何移植一个51的程序到合泰单片机
下面是一个51的程序,通过一个按键控制2个LED灯的亮暗:
#include <REGX52.H>
#define uchar unsigned char
#define uint unsigned int
sbit button=P3^0;
sbit cold=P1^2;
sbit hot=P1^0;
uchar flag,ZKBH,ZKBC,m=0,m1=0;
bit eavalue,trvalue;
long int keytime=0;
uchar code
tableh[5][5]={{0,0,0,0,0},{5,10,15,20,25},{10,20,30,40,50},{10,20,30,40,50},{10,20,30,40,50}}; uchar code
tablec[5][5]={{10,20,30,40,50},{10,20,30,40,50},{10,20,30,40,50},{5,10,15,20,25},{0,0,0,0,0}}; void init_sys(void);
void Delay10Ms();
void tiaose();
void liangdu();
void keyscan();
void main()
{
eavalue=0;
trvalue=0;
flag=0;
P1=0xff;
init_sys();
while(1)
{
ZKBH=tableh[m][m1];
ZKBC=tablec[m][m1];
keyscan(); /*得出了flag的值为长短按键选项*/
}
}
void init_sys(void)
{
TMOD=0X01;
TH0=0XFF;
TL0=0X9c;
TR0=1;
ET0=1;
EA=1;
}
void timer0( ) interrupt 1 using 2 //PWM的产生
{
static uchar i=0;
TH0=0XFF;
TL0=0X9c;
i++;
if(i>=100)
i=0;
if(i<(ZKBH-0)) //减去0就是把char换成了int形式/*当小于等于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
hot=0;
else
hot=1;
if(i>=(100-ZKBC))
cold=0;
else
cold=1;
}
void keyscan()
{
uint temp;
flag=0;
if(!button)
Delay10Ms();
if(!button)
{
keytime=0;
while(!button){
keytime++;
temp=25;
while(temp--) ;
if(keytime>3000)
{
if(EA==0)
{
temp=60000;
while(temp--);
temp=6000;
while(temp--) ;
}
EA=eavalue;
TR0=trvalue;
P1=0xff;
flag=1;
keytime=0;//这条省去长按会闪烁
}
}
}
if(flag==1)
{
flag=0;
eavalue=~eavalue;
trvalue=~trvalue;
keytime=0;
}
if (keytime<600&&keytime>0) tiaose();
if(keytime>600&&keytime<3000) liangdu();
}
void tiaose()
{
m=m+1;
if(m>=5) m=0;
ZKBH=tableh[m][m1];
ZKBC=tablec[m][m1];
keytime=0;
}
void liangdu()
{
m1=m1+1;
if(m1>=5) m1=0;
ZKBH=tableh[m][m1];
ZKBC=tablec[m][m1];
keytime=0;
}
void Delay10Ms()
{
uint temp;
temp=1205;
while(temp--) ;
}
51的程序结束了
下面是移植到合泰单片机中,功能都是一样的。

只是对应的引脚改变了还有定时器的初值改变了
#include "HT48R01C.h"
#define uchar unsigned char
#define uint unsigned int
#define button _pa0
#define cold _pa5
#define hot _pa6
#pragma rambank0
bit eavalue;
bit trvalue;
#pragma norambank
uchar flag,ZKBH,ZKBC,m,m1;
uchar i;
uint keytime;
uint temp;
const uchar
tableh[5][5]={{0,0,0,0,0},{3,7,10,13,17},{10,20,30,40,50},{10,20,30,40,50},{10,20,30,40,50}}; const uchar
tablec[5][5]={{10,20,30,40,50},{10,20,30,40,50},{10,20,30,40,50},{3,7,10,13,17},{0,0,0,0,0}}; //uchar tableh[5][5];
//uchar tablec[5][5];
void init_sys(void);
void Delay10Ms();
void tiaose();
void liangdu();
void keyscan();
#pragma vector ISR_TIMER0 @ 0x8
void ISR_TIMER0(void)
{
_tmr0=253;
i++;
if(i>=100)
i=0;
if(i<(ZKBH-0)) //减去0就是把char换成了int形式/*当小于等于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
cold=0;
else
cold=1;
if(i>=(100-ZKBC))
hot=0;
else
hot=1;
}
void main()
{
eavalue=0;
trvalue=0;
flag=0;
keytime=0;
m=0;
m1=0;
i=0;
init_sys();
while(1)
{
ZKBH=tableh[m][m1];
ZKBC=tablec[m][m1];
keyscan();
}
}
void init_sys(void)
{
_pac0=1;
_pac5=0;
_pac6=0;
_pa=0xf;
_intc0=0x05;
_tmr0c=0x87;
_tmr0=253;
_t0on=1;
}
void keyscan()
{
flag=0;
if(!button)
// Delay10Ms();
if(!button)
{
keytime=0;
while(!button){
keytime++;
temp=25;
while(temp--) ;
if(keytime>4000)
{
if(_emi==0)
{
temp=60000;
while(temp--);
temp=6000;
while(temp--) ;
}
_emi=eavalue;
_t0on=trvalue;
_pa=0xf;
flag=1;
keytime=0;//这条省去长按会闪烁
}
}
}
if(flag==1)
{
flag=0;
eavalue=~eavalue;
trvalue=~trvalue;
keytime=0;
}
if(keytime<600&&keytime>0) tiaose();
if(keytime>600&&keytime<3000) liangdu(); }
void tiaose()
{
m=m+1;
if(m>=5) m=0;
// ZKBH=tableh[m][m1];
// ZKBC=tablec[m][m1];
keytime=0;
}
void liangdu()
{
m1=m1+1;
if(m1>=5) m1=0;
// ZKBH=tableh[m][m1]; // ZKBC=tablec[m][m1];
keytime=0;
}
void Delay10Ms()
{
uint temp;
temp=1205;
while(temp--) ; }
希望对你有所帮助.。

相关主题