一、使用proteus绘制简单的电路图,用于后续仿真
二、编写程序
/********************************************************************************************************************
---- @Project: LED-74HC595
---- @File: main.c
---- @Edit: ZHQ
---- @Version: V1.0
---- @CreationTime: 20200602
---- @ModifiedTime: 20200603
---- @Description: 用矩阵键盘中的S1键作为启动独立按键,用S5按键模拟左边
---- 的开关感应器,用S9按键模拟右边的开关感应器,用S13按键模拟下边的开关感应器。
---- 记得把输出线P0.4一直输出低电平,模拟独立按键的触发地GND。
---- 开机默认机械手在左上方的原点位置。按下启动按键后,机械手从左边开始往右边移动,当机械手移动
---- 到最右边时,机械手马上开始往下移动,最后机械手移动到最右下角的位置时,延时1秒,然后原路返
---- 回,一直返回到左上角的原点位置。注意:启动按键必须等机械手处于左上角原点位置时,启动按键的
---- 触发才有效。
---- 单片机:AT89C52
********************************************************************************************************************/
#include "reg52.h"
/*——————宏定义——————*/
#define FOSC 11059200L
#define T1MS (65536-FOSC/12/1000) /*1ms timer calculation method in 12Tmode*/
#define const_voice_short 40 /*蜂鸣器短叫的持续时间*/
#define const_key_time1 20 /*按键去抖动延时的时间*/
#define const_sensor 20 /*开关感应器去抖动延时的时间*/
#define const_1s 500 /*开关感应器去抖动延时的时间*/
/*——————变量函数定义及声明——————*/
/*定义74HC595*/
sbit Hc595_Sh = P2^3;
sbit Hc595_St = P2^4;
sbit Hc595_Ds = P2^5;
/*定义蜂鸣器*/
sbit Beep = P2^7;
/*定义按键*/
sbit Key_S1 = P0^0; /*定义按键S1,对应S1*/
sbit Key_Left = P0^1; /*定义开关感应器Left,对应S5*/
sbit Key_Right = P0^2; /*定义开关感应器Right,对应S9*/
sbit Key_Down = P0^3; /*定义开关感应器Down,对应S13*/
sbit Key_Gnd = P0^4; /*定义按键模拟地*/
unsigned char ucLED1 = 0; /*代表16个灯的亮灭状态,0代表灭,1代表亮*/
unsigned char ucLED2 = 0;
unsigned char ucLED3 = 0;
unsigned char ucLED4 = 0;
unsigned char ucLED5 = 0;
unsigned char ucLED6 = 0;
unsigned char ucLED7 = 0;
unsigned char ucLED8 = 0;
unsigned char ucLED9 = 0;
unsigned char ucLED10 = 0;
unsigned char ucLED11 = 0;
unsigned char ucLED12 = 0;
unsigned char ucLED13 = 0;
unsigned char ucLED14 = 0;
unsigned char ucLED15 = 0;
unsigned char ucLED16 = 0;
unsigned char ucLed_update = 1; /*刷新变量。每次更改LED灯的状态都要更新一次。*/
unsigned char ucLedStatus16_09 = 0; /*代表底层74HC595输出状态的中间变量*/
unsigned char ucLedStatus08_01 = 0; /*代表底层74HC595输出状态的中间变量*/
unsigned int uiRunTimeCnt = 0; /*运动中的时间延时计数器变量*/
unsigned char ucRunStep = 0; /*运动控制的步骤变量*/
unsigned char ucKeySec = 0; /*被触发的按键编号*/
unsigned int uiKeyTimeCnt1 = 0;
unsigned char ucKeyLock1 = 0;
unsigned int