单片机疑问 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 按键舵机会运行 怎么回事 展开
#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 按键舵机会运行 怎么回事 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询