?? 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 + -