单片机疑问 100

#include<reg52.h>#defineucharunsignedcharunsignedcharcount;//0.5ms次数标识unsignedcharjd=... #include <reg52.h>
#define uchar unsigned char
unsigned char count; //0.5ms次数标识
unsigned char jd=0;
unsigned char e,f,g,h;
sbit bit1 = P2^0;
sbit bit2 = P2^1;
sbit bit3 = P2^2;
sbit bit4 = P2^3;
sbit pwm1 = P0^0;
sbit k1=P3^5; //定义按键
sbit k2=P3^4; //定义按键
sbit k3=P3^3; //定义按键
sbit k4=P3^2; //定义按键
sbit k5=P3^7; //定义按键
//uchar code dulatab[] = //数字编码0-9
// {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
uchar code dulatab[] = //数字编码0-9
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//----------------------------------------------------------------
void Time0_Init(){
TMOD = 0x01; //定时器0工作在方式1
TH0 = (65535-500)/256;
TL0 = (65535-500)%256; //12MZ晶振,0.5ms
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}

void Time0_Int() interrupt 1{
static int t=0;
t++;
TH0 = (65535-500)/256; //重新赋值
TL0 = (65535-500)%256;
if(count< jd){ //判断0.5ms次数是否小于角度标识
pwm1=1; //确实小于,PWM输出高电平
}else{
pwm1=0; //大于则输出低电平
}
count++; //(count+1); //0.5ms次数加
if(count>=40)
count=0;
}
unsigned char count; //0.5ms次数标识

void delay (unsigned int w){ // 0.1ms延时程序(12MHz 10倍于51单片机速度时)
unsigned char i;
while( --w != 0){
for(i = 0; i < 12; i++);
}
}

//----------------------------------------------------------------
void disp_num(uchar a , b, c , d)
{
uchar l;
for(l = 1; l < 250; l++) {
P2 = 255; //关显示.
P0 = dulatab[a];
bit1 = 0; delay(4);
P2 = 255; //关显示.
P0 = dulatab[b];
bit2 = 0; delay(4);
P2 = 255; //关显示.
P0 = dulatab[c];
bit3 = 0; delay(4);
P2 = 255; //关显示.
P0 = dulatab[d];
bit4 = 0; delay(4);
}
}

//----------------------------------------------------------------
void control() {

if(k1 == 0){
delay(10);
if(k1 == 0){
while(!k1);
e++ ;
if(e>9)
e=0;
}}

if(k2 == 0){
delay(10);
if(k2 == 0){
while(!k2);
f++ ;
if(f>9)
f=0;
}}

if(k3 == 0){
delay(10);
if(k3 == 0){
while(!k3);
g++ ;
if(g>9)
g=0;
}}

if(k4 == 0){
delay(10);
if(k4 == 0){
while(!k4);
h++ ;
if(h>9)
h=0;
}}

if(k5 == 0){
delay(10);
if(k5 == 0){
while(!k5);
jd=4; //转动一个角度
delay(e*1000+f*100+g*10+h);
jd=1; //回到初始角度
}}

}

//----------------------------------------------------------------
void main()
{
count=0;
Time0_Init();
while(1){
control(); //按键
disp_num(e,f,g,h); //段码显示
}
}

K1~K4 按键舵机会运行 怎么回事
展开
 我来答
tony_sgt
2018-02-28 · TA获得超过8417个赞
知道大有可为答主
回答量:5330
采纳率:66%
帮助的人:1153万
展开全部
可以用仿真单步执行看看具体问题出在哪里…另外在中断函数内为何还要重复声明count呢?
追问
那你觉得应该怎么改?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式