📄 keil.c
字号:
/*************测试控制器程序 *************************
** 编号 中断源 入口地址 **
** 0 外部中断0 0003H **
** 1 定时计数0 000BH **
** 2 外部中断1 0013H **
** 3 定时记数1 001BH **
** 4 串口中断 0023H **
*******************************************************
***仓控制板硬件定义
P35--出牌电机 P11--出牌计数 P12--传感器电源开关
P15--传动电机 P10--有无牌检测 P13--传感器电源开关
P27--开始按键 P25--蜂鸣器 P0---LEDdata
P14--DIP拨码 P16--选择传动电机转动方式
P26--个 P2.2--十 P2.4--百 P2.0--千
******************************************************
计数传感器有牌时为H、无牌时为L
有无牌检测传感器有牌时为L、无牌时为H
NUMLAB: ;共阳
db 0A0H ;NUM_0
db 0BBH ;NUM_1
db 62H ;NUM_2
db 2AH ;NUM_3
db 39H ;NUM_4
db 2CH ;NUM_5
db 24H ;NUM_6
db 0BAH ;NUM_7
db 20H ;NUM_8
db 28H ;NUM_9
*********************************************************/
#include <stdio.h>
#include <AT89x52.h>
#include <absacc.h>
#include <intrins.h>
#define Front_motor1 P2_3 //电机一控制
#define Front_motor2 P2_1 //电机二控制
#define Back_motor P1_5 //后电机控制
#define Count_OPTO P1_1 //计数传感器OPTO
#define Back_OPTO P1_0 //有无感器OPTO
#define Key P2_7
#define Speak P2_5
#define OPTOV1 P1_2 /*有无牌检测传感器电源开关*/
#define OPTOV2 P1_3 /*出牌计数传感器电源开关*/
#define LED_CS1 P2_6 /*LED个位*/
#define LED_CS2 P2_2 /*LED十位*/
#define LED_CS3 P2_4 /*LED百位*/
#define LED_CS4 P2_0 /*LED千位*/
void Start(void); /*初始化*/
void Delay50ms(void);
void Delay(void);
void OutCard(void); /*发牌*/
void LEDdisplay(void);
void TimeINT(void);
unsigned char TAB[10]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};
unsigned char LEDdata1,LEDdata2,LEDdata3,LEDdata4;
unsigned char Tdata,Card_data;
unsigned char Ydata;
bit RXbit,OutCardBit,CLRbit;
void main(void)
{
TMOD=0x01; /*设定时器0,工作方式1 */
TH0=0x3c; /*定时器0初值*/
TL0=0xb0; /*定时器0初值*/
//TR0=0;
ET0=1; /* 中断0边沿触发方式 */
EA=1;
Front_motor1=0; /*不转*/
Front_motor2=1; /*不转*/
LEDdata1=0; /*初始化LED所有位清零*/
LEDdata2=0;
LEDdata3=0;
LEDdata4=0;
Tdata=0;
Ydata=0;
Speak=0; /*响声50ms*/
Delay50ms();
Speak=1;
while(P1_6)
{
Delay50ms();
Delay50ms();
Delay50ms();
Delay50ms();
Delay50ms();
Back_motor=0; /*传牌电机转*/
Front_motor1=1; /*正转*/
Front_motor2=1; /*正转*/
Delay50ms();
Delay50ms();
Delay50ms();
Delay50ms();
Delay50ms();
Delay50ms();
Back_motor=1; /*传牌电机停*/
Front_motor1=0; /*出牌电机停*/
Front_motor2=1; /*出牌电机停*/
}
if(P1_6) /*读拨码判断传牌电机是否为间歇运转*/
TR0=1; /*间歇运转*/
else
TR0=0; /*连续运转*/
while(1)
{
OPTOV1=0; /*开传感器电源*/
OPTOV2=0; /*开传感器电源*/
while(Back_OPTO) /*检测牌盒是否无牌?*/
{
if(Ydata==20) /*检测20次*/
{
while(Back_OPTO)
{
Ydata=0;
TR0=0;
Back_motor=1; /*传牌电机停*/
Delay50ms();
Front_motor1=0; /*出牌电机停*/
Front_motor2=1; /*出牌电机停*/
}
}
Ydata++;
break;
}
if(Card_data==5)
{
TR0=0;
Front_motor1=0; /*出牌电机停*/
Front_motor2=1; /*出牌电机停*/
Back_motor=1; /*传牌电机停*/
Card_data=0; /*发牌计数清零*/
Delay50ms();
Delay50ms();
if((Count_OPTO)) /*检测计数传感器是否有牌*/
{
while(Count_OPTO)
{
Front_motor1=0; /*有牌出牌电机反转*/
Front_motor2=1;
}
Delay50ms();
Delay50ms();
Front_motor1=0; /*出牌电机停*/
Front_motor2=1; /*出牌电机停*/
}
Delay50ms();
Delay50ms();
}
if(P1_6) /*读拨码判断传牌电机是否为间歇运转*/
TR0=1; /*间歇运转*/
else
{
TR0=0; /*连续运转*/
Back_motor=0;
}
Front_motor1=1; /*正转*/
Front_motor2=1; /*正转*/
//Front_motor=0;
LEDdisplay();
if(Count_OPTO)
{
do{
Back_motor=1;
TR0=1;
LEDdisplay();
}
while(Count_OPTO);
{
Card_data++;
LEDdata1++;
if(LEDdata1>9) /*计数进位*/
{
LEDdata1=0;
LEDdata2++;
if(LEDdata2>9)
{
LEDdata2=0;
LEDdata3++;
if(LEDdata3>9)
{
LEDdata3=0;
LEDdata4++;
if(LEDdata4>9)
{
LEDdata1=0;
LEDdata2=0;
LEDdata3=0;
LEDdata4=0;
Speak=0;
Delay50ms();
Speak=1;
}
}
}
}
}
}
}
}
/************************************/
void LEDdisplay(void) /*数码显示*/
{
LED_CS4=1;
P0=TAB[LEDdata1];
LED_CS1=0;
Delay();
LED_CS1=1;
P0=TAB[LEDdata2];
LED_CS2=0;
Delay();
LED_CS2=1;
P0=TAB[LEDdata3];
LED_CS3=0;
Delay();
LED_CS3=1;
P0=TAB[LEDdata4];
LED_CS4=0;
Delay();
}
/**********************************/
void TimeINT(void) interrupt 1 using 0
{
Tdata++;
if(P1_4==1)
{
if(Tdata==5)
{
Tdata=0;
Back_motor=!Back_motor;
}
}
else
{
if(Tdata==10)
{
Tdata=0;
Back_motor=!Back_motor;
}
}
TH0=0x3c; /*定时器0初值*/
TL0=0xb0; /*定时器0初值*/
TR0=1;
}
/**********************************/
void Delay50ms(void)
{
unsigned char i;
for(i=0;i<0x20;i++)
{
LEDdisplay();
}
}
/**********************************/
void Delay(void)
{
unsigned char i,Count0;
for(i=0;i<0x2;i++)
{
for(Count0=0;Count0<0xff;Count0++)
{
_nop_();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -