标题:
单片机程序中pwm信号读取不出来,求解救!
[打印本页]
作者:
石头儿
时间:
2017-11-19 00:05
标题:
单片机程序中pwm信号读取不出来,求解救!
51单片机中断中pwm的信号读取不出来,无法和count比较
#include<reg52.h>
#include "control.h"
#include "12864.h"
#define uchar unsigned char
#define uint unsigned int
#define keydata P1
sbit A1=P2^2;
sbit A2=P2^3;
sbit ENA=P2^4;
signed int count=0;
signed char pwm=0;
signed char anjian=0;
uchar numshi=0;
uchar numge=0;
void delayms(unsigned int xms)
{
unsigned int i,j;
for(i=0;i<xms;i++)
for(j=0;j<110;j++);
}
void pwm_dis()
{
numshi=pwm/10;
numge=pwm%10;
write_12864_data(0x30+numshi);
write_12864_data(0x30+numge);
}
void anjian_dis()
{
numshi=anjian/10;
numge=anjian%10;
write_12864_data(0x30+numshi);
write_12864_data(0x30+numge);
}
void keyscan()
{
unsigned char dat=0;
unsigned char num=0;
keydata=0xfe;
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
delayms(5);
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
dat=keydata;
switch(dat)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(dat!=0xf0)
{
dat=keydata;
dat=dat&0xf0;
}
}
}
keydata=0xfd;
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
delayms(5);
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
dat=keydata;
switch(dat)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(dat!=0xf0)
{
dat=keydata;
dat=dat&0xf0;
}
}
}
keydata=0xfb;
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
delayms(5);
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
dat=keydata;
switch(dat)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(dat!=0xf0)
{
dat=keydata;
dat=dat&0xf0;
}
}
}
keydata=0xf7;
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
delayms(5);
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
dat=keydata;
switch(dat)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(dat!=0xf0)
{
dat=keydata;
dat=dat&0xf0;
}
}
}
switch(num)
{
case 1: write_12864_addr(1,3);
pwm=0;
pwm_dis();
break;
case 2: write_12864_addr(1,3);
pwm=10;
pwm_dis();
break;
case 3:write_12864_addr(1,3);
pwm=20;
pwm_dis();
break;
case 4:write_12864_addr(1,3);
pwm=30;
pwm_dis();
break;
case 5:write_12864_addr(1,3);
pwm=40;
pwm_dis();
break;
case 6:write_12864_addr(1,3);
pwm=50;
pwm_dis();
break;
case 7:write_12864_addr(1,3);
pwm=60;
pwm_dis();
break;
case 8:write_12864_addr(1,3);
pwm=70;
pwm_dis();
break;
case 9: write_12864_addr(1,3);
pwm=80;
pwm_dis();
break;
case 10: write_12864_addr(1,3);
pwm=90;
pwm_dis();
break;
case 11:write_12864_addr(1,3);
pwm=99;
pwm_dis();
break;
case 12:write_12864_addr(1,3);
pwm=35;
pwm_dis();
break;
case 13:write_12864_addr(1,3);
pwm=pwm+5;
pwm_dis();
break;
case 14:write_12864_addr(1,3);
pwm=pwm-5;
pwm_dis();
break;
case 15:write_12864_addr(1,3);
pwm=pwm+1;
pwm_dis();
break;
case 16:write_12864_addr(1,3);
pwm=pwm-1;
pwm_dis();
break;
}
}
void keyscan_1()
{
unsigned char dat=0;
unsigned char num=0;
keydata=0xfe;
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
delayms(5);
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
dat=keydata;
switch(dat)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(dat!=0xf0)
{
dat=keydata;
dat=dat&0xf0;
}
}
}
keydata=0xfd;
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
delayms(5);
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
dat=keydata;
switch(dat)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(dat!=0xf0)
{
dat=keydata;
dat=dat&0xf0;
}
}
}
keydata=0xfb;
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
delayms(5);
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
dat=keydata;
switch(dat)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(dat!=0xf0)
{
dat=keydata;
dat=dat&0xf0;
}
}
}
keydata=0xf7;
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
delayms(5);
dat=keydata;
dat=dat&0xf0;
while(dat!=0xf0)
{
dat=keydata;
switch(dat)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(dat!=0xf0)
{
dat=keydata;
dat=dat&0xf0;
}
}
}
switch(num)
{
case 1: write_12864_addr(3,7);
anjian=0;
anjian_dis();
break;
case 2: write_12864_addr(3,7);
anjian=10;
anjian_dis();
break;
case 3:write_12864_addr(3,7);
anjian=20;
anjian_dis();
break;
case 4:write_12864_addr(3,7);
anjian=30;
anjian_dis();
break;
case 5:write_12864_addr(3,7);
anjian=40;
anjian_dis();
break;
case 6:write_12864_addr(3,7);
anjian=50;
anjian_dis();
break;
case 7:write_12864_addr(3,7);
anjian=60;
anjian_dis();
break;
case 8:write_12864_addr(3,7);
anjian=anjian+1;
anjian_dis();
break;
case 9: write_12864_addr(3,7);
anjian=anjian+2;
anjian_dis();
break;
case 10: write_12864_addr(3,7);
anjian=anjian+3;
anjian_dis();
break;
case 11:write_12864_addr(3,7);
anjian=anjian+4;
anjian_dis();
break;
case 12:write_12864_addr(3,7);
anjian=anjian+5;
anjian_dis();
break;
case 13:write_12864_addr(3,7);
anjian=anjian+6;
anjian_dis();
break;
case 14:write_12864_addr(3,7);
anjian=anjian+7;
anjian_dis();
break;
case 15:write_12864_addr(3,7);
anjian=anjian+8;
anjian_dis();
break;
case 16:write_12864_addr(3,7);
anjian=anjian+9;
anjian_dis();
break;
}
}
void timer1() interrupt 3
{
TH1=(65535-1000)/256;
TL1=(65535-1000)%256;
count++;
if(count=100)
{
count=0;
}
if(count<=pwm)
{
ENA=1;
A1=0;
A2=1;
}
else
{
ENA=0;
A1=0;
A2=1;
}
TR1=1;
}
复制代码
作者:
石头儿
时间:
2017-11-19 00:19
顶 求解救
作者:
wulin
时间:
2017-11-19 06:44
你写的这程序中既没有主程序main(),也没有初始化定时器,怎么能够跑得起来?
作者:
石头儿
时间:
2017-11-19 10:35
wulin 发表于 2017-11-19 06:44
你写的这程序中既没有主程序main(),也没有初始化定时器,怎么能够跑得起来?
这是子程序之一,这个子程序的pwm信号读不出来,你帮我看看,是不是switc好 case 函数有问题 谢谢啦
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1