title: 单片机期末考试答案分析B卷
tags:
- 期末考试答案
categories:
- 单片机期末考试
abbrlink: 64152
date: 2020-06-23 19:55:40
由于我做的是B卷,所以在这里我只能给出B卷的答案。
具体代码
这次的代码全是按照考试的要求来的,没有任何花里胡哨的内容,所以很简单,不需要过多的解释。我在这里直接给出我自己写的答案。
#include<reg51.h>
#include<intrins.h>
#include"1602lcd.h"
#define uchar unsigned char
#define uint unsigned int
uchar tab1[]={"17JX-MOTOR"};
uchar motor1[]={"ST-M"};
uchar motor2[]={"OC-M"};
uchar tab2[]={"ERR!"};
uchar tab3[]={" "};
uchar key_fwd_now=1,key_fwd_last=1;
uchar key_bac_now=1,key_bac_last=1;
uchar spd_up_now=1,spd_up_last=1;
uchar spd_dn_now=1,spd_dn_last=1;
uchar sped=5;
sbit key_fwd=P1^4;
sbit key_bac=P1^5;
sbit signal_1=P1^2;
sbit signal_2=P1^3;
sbit spd_up=P1^0;
sbit spd_dn=P1^1;
sbit shift_motor=P3^5;
sbit motor_dir=P1^6;
sbit motor_pul=P1^7;
bit fwd_flag;
bit bac_flag;
bit shift_flag;
bit fwd1_flag;
bit bac1_flag;
void motor();
void Delay1000ms();
void Delay50us();
void speed();
void main()
{
EA=1;
ET0=1;
TMOD=0x21;
TH0=(65536-sped*2000)/256;
TL0=(65536-sped*2000)%256;
IT0=1; //设置两个限位的外部中断方式
IT1=1;
EX0=1;
EX1=1;
lcd_init();
lcd_pos(1,4);
lcdwrite_string(tab1);
lcd_pos(2,1);
lcdwrite_string("1736210039");
Delay1000ms();
Delay1000ms();
Delay1000ms();
lcd_pos(1,14);
lcdwrite_sz(sped);
lcd_clear();
while(1)
{
spd_up_last = spd_up_now;
spd_up_now = spd_up;
spd_dn_last = spd_dn_now;
spd_dn_now = spd_dn;
// key_fwd_last = key_fwd_now;
// key_fwd_now = key_fwd;
// key_bac_last = key_bac_now;
// key_bac_now = key_bac;
motor();
speed();
if (shift_flag==0) {
if(key_fwd==0)
{
fwd_flag=~fwd_flag;
if (fwd_flag==1)