几天以来,下程序都不能用PROTUSE正常仿真,不知是何?请高手帮改甄!!!
程序如下:// 4彩灯控制方案
#include "pic.h"
__CONFIG (0x3FF9); // ICD2调试用配置字
#define K1 RB0 // X光藕
#define K2 RB1 // X方向
#define K3 RB2 // 复位
#define K4 RB3 // 原点
#define K5 RB5 // 外触发
#define K6 RB6 // Y光藕
#define K7 RB7 // 外部触控
#define XTAL_FREQ 4 // 外接晶振主频,单位为MHz
//K6为Y光藕,K5为外触发端//
void DelayMS(unsigned int ms) //定义延时函数
{
unsigned int j=0;
for(ms;ms>0;ms--)
for(j=27*XTAL_FREQ;j>0;j--) // 1MHz时约是27,其它主频请酌情修改
{
}
}
void main()
{
TRISA=0b10000; // RC2做为普通I/O输出引脚,用其它引脚一样
TRISB=0b01101111; // RB4,RB8输出,其余输入
RB7=1;
RA0=1;
RA1=1;
RA2=1;
RA3=1;
DelayMS(90);
RB7=0;
RB4=0;
RA0=1;
RA1=1;
RA2=1;
RA3=1; // A口初始化
while(1)
{
if(K6==0)
{
DelayMS(60);
if(K6==0)
{DelayMS(130);
RA2=0;
while(K6==0);
}
}
if(K5==0)
{ DelayMS(30);
if(K5==0)
{
RA0=1;
RB4=!RB4;
DelayMS(90);
RB4=!RB4;
while(K5==0);
}
}
if(K1==0)
{
DelayMS(60); // 确实光藕遮光
if(K1==0)
{ DelayMS(200);
RA0=0; // X停
while(K1==0);
}
}
if(K2==0) // 若X方向按键按
{
DelayMS(30); // 消除机械按键前沿抖动
if(K2==0)
{RA1=!RA1; // 旋转方向
RA2=1;
while(K2==0);
}
}
if(K3==0) // 若复位按键按下
{
DelayMS(30); // 消除机械按键前沿抖动
if(K3==0) // 再判断为0说明是一次正常按键
{ DelayMS(5); //延时
RA0=0; //
RA1=0;
RA2=1;
RA3=0; // 旋转方向切换工作台回原点
TRISB=0b00001000;
while(K3==0);
}
}
if(K4==0) // 若原点确认按键按下
{
DelayMS(30); // 消除机械按键前沿抖动
if(K4==0) // 再判断为0说明是一次正常按键
{ DelayMS(30);//延时
TRISB=0;
PORTA=0;
RB4=0;
RB7=1; // 取反
DelayMS(190);
RB7=0;
DelayMS(60);
RB7=1;
DelayMS(160);
RB7=0;
$=-4;
}
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>