新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AT89C2051利用中斷產(chǎn)生PWM

AT89C2051利用中斷產(chǎn)生PWM

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/201611/321335.htm

產(chǎn)生的波形

1200ms為1

600us為




根據(jù)NEC協(xié)議制作的波形圖

#include "REG2051.H"

#define uint unsigned int
#define uchar unsigned char


sbit PWM=P3^7;
uchar code Pcode[]={0x16,0x0C,0x18,0x5E,0x08,0x1C,0x5A,0x42,0x52,0x4A,0x47,0x44,0x40};

void onKeyDown(uchar,uchar);
void write_data(uchar);
void start();
void delay_560(void);
void delay_1690(void);
void delay_4500(void);

void main(){
uint r,c;
PWM=0;
while(1){
P1=0x0f;
if(P1!=0x0f){
r=~P1-0xf0;
P1=0xf0;
c=~(P1>>4)-0xf0;
onKeyDown(r,c);
}
}
}

void onKeyDown(uchar row,uchar column){
uchar cmd,addr;
cmd=Pcode[row*4+column];
addr=0xaa;
start();
write_data(addr);
write_data(~addr);
write_data(cmd);
write_data(~cmd);
}

void start(){
PWM=1;
delay_4500();
delay_4500();
PWM=0;
delay_4500();
}

void write_data(uchar d){
uchar i;
for(i=0;i<8;i++){
d<<=1;
if(CY){
PWM=1;
delay_560();
PWM=0;
delay_1690();
}else{
PWM=1;
delay_560();
PWM=0;
delay_560();
}
}
}

void delay_560(void)
{
unsigned char i,j,k;
for(i=31;i>0;i--)
for(j=3;j>0;j--)
for(k=1;k>0;k--);
}

void delay_1690(void)
{
unsigned char i,j,k;
for(i=211;i>0;i--)
for(j=1;j>0;j--)
for(k=1;k>0;k--);
}

void delay_4500(void)
{
unsigned char i,j,k;
for(i=26;i>0;i--)
for(j=34;j>0;j--)
for(k=1;k>0;k--);
}




上一頁 1 2 下一頁

關(guān)鍵詞: AT89C2051中斷PW

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉