常州工学院单片机及应用系统设计2021-2022 学年第 二 学期 考试类型 开卷 课程编码 0302005

 

 

 

第一题

#include "SC95F861x_C.H"

#include <INTRINS.H>

unsigned char keydata=0;

void delay(unsigned int timer)      //延时函数

{

  while(timer>0)

timer--;

}

void IOinit()

{

P5CON=0x00;

P5PH=0x03;

P3CON=0xFF;

P3PH=0xFF;

}

void readkey()

{

if(P51==0)

{

delay(1000);      //延时去抖

if(P51==0)

{

keydata=1;

}

}

else if(P50==0)

{

delay(1000);

if(P50==0)

{

keydata=2;

}

}

}

void main()

{

unsigned char data=0x7F;

IOinit();

while(1)

{

readkey();

if(keydata==1)         //S1按下,做所有led灯循环点亮

{

P3=data;

data=_cror_(data,1);   //循环右移

delay(50000);

}

else if(keydata==2)

{

P3=0xFF;         //即S2按下,做熄灭所有led灯

}

  

}

}

第二题

#include "SC95F861x_C.H"

#include <INTRINS.H>

void delay(unsigned int timer)

{

  while(timer>0)

timer--;

}

void delay1(unsigned int timer1)

{

  while(timer1>0)

timer1--;

}

void delay2(unsigned int timer2)

{

  while(timer2>0)

timer2--;

}

void IOinit()

{

P0CON=0x03;

P0PH=0x43;

P4CON=0x00;

P4PH=0x01;

}

void EXINT0init()

{

INT0F=0x40;      //P06下降沿触发

EINT0=1;                  //打开分开关

EA=1;                    //打开总开关

}

void EXINT1init()

{

INT1F=0x01;  //        外部中断1设置为P40下降沿触发

EINT1=1;                  //打开分开关

}

void EXINT0() interrupt 0

{

delay1(1000);            //延时去抖

if(P06==0)

{

P00=0;

P01=0;

}

}

void EXINT1() interrupt 2

{

delay2(1000);         //延时去抖

if(P40==0)

{

P00=1;

P01=1;

}

}

void main()

{

IOinit();

P00=1;

P01=1;

EXINT0init();

EXINT1init();

while(1)

{

  

}

}

第三题

#include "SC95F861x_C.H"

#include <INTRINS.H>

int timer0counter=0;

int timer0counter1=0;

bit BUZZdata=0;

bit old=0;

void delay(unsigned int timer)

{

  while(timer>0)

timer--;

}

void IOinit()

{

P5CON=0x00;

P5PH=0x08;

P2CON=0x80;

P2PH=0x80;

P1CON=0x20;

}

void TIMER0init()

{

TMCON=0x00;        //设置不分频

TMOD=0x21;         //定时器0---方式1,定时器1-----方式2

TL0=(65536-2667)%256; //----1ms

TH0=(65536-2667)/256;

ET0=1;              //打开分开关

TR0=1;              //打开定时器开关

EA=1;               //打开总开关

}

void TIMER0() interrupt 1

{

TL0=(65536-2667)%256;  //方式1要手动置位

TH0=(65536-2667)/256; 

timer0counter++;

if(timer0counter>499)        //定0.5s

{

P27=!P27;

timer0counter=0;

}

if(BUZZdata==1)

{

P15=!P15;

timer0counter1++;

if(timer0counter1>4999)   //蜂鸣器响5s后停止

{

timer0counter1=0;

BUZZdata=0;

}

}

}

void readkey()

{

if(P53==0)

{

delay(1000);

if(P53==0&&old==0) //让按键只识别一次P53等于0,一直按着按键也只是别一次

{

BUZZdata=1;

old=1;

}

}

else if(P53==1)

{

old=0;

}

}

void main()

{

IOinit();

P27=0;

TIMER0init();

while(1)

{

readkey();

}

}

第四题

#include "SC95F861x_C.H"

unsigned char recv=0;

void delay(int timer)

{

while(timer>0)

{

timer--;

}

}

void IOinit()

{

P3CON=0x84;

P3PH=0x80;

P2CON=0x00;

}

void URAT0init()

{

  SCON  = 0X50;    //设置串口方式1,且允许接受

EUART = 1;      //打开分开关

TMOD=0x21;    //将定时器1设置为方式2

TH1 = (32000000 / 4800) / 256;   //设置波特率为4800

TL1 = (32000000 / 4800) % 256;

TR1 = 0;        //将定时器1开关关掉

EA=1;          //打开总开关

}

void uart0() interrupt 4

{

if(RI)

{

RI=0;

recv=SBUF;    //接收数据

if(recv==0x55)

{

P37=0;

SBUF=0x55;

}

else if(recv==0xAA)

{

P32=1;

SBUF=0xAA;

}

else if(recv==0x50)

{

P37=1;

SBUF=0x50;

}

else if(recv==0xA0)

{

P32=0;

SBUF=0xA0;

}

}

}

void main()

{

IOinit();

URAT0init();

while(1)

{

}

}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片机原理、接口及应用-嵌入式系统技术基础 是一本涵盖了单片机原理、接口以及应用的电子书。单片机是嵌入式系统中的重要组成部分,它是一种集成电路,包含了处理器、内存和外设等功能模块。单片机通过内部程序控制各个模块之间的协作,实现复杂的功能和任务。 这本电子书从基础的单片机原理开始介绍,包括单片机的架构、指令系统、中断和定时器等方面。读者可以了解单片机内部的组成和工作原理,为后续的学习打下坚实基础。 接着,在介绍完单片机原理后,电子书重点关注了单片机的接口技术。接口是单片机与外部设备之间进行数据和信号交换的桥梁。电子书详细介绍了并行口、串行口、模拟接口和总线接口等常见的单片机接口,并给出了实际电路和程序设计的案例。通过学习这些接口技术,读者可以掌握如何与外部设备进行数据通信和控制。 最后,电子书还介绍了嵌入式系统单片机应用。嵌入式系统是一种特定功能的计算机系统,广泛应用于家电、通信、汽车等领域。通过学习单片机应用,读者可以了解到嵌入式系统在实际生活和工业中的应用案例,从而更加深入地理解单片机技术的实际价值和应用前景。 总的来说,这本电子书通过系统全面的介绍单片机原理、接口和应用,可以帮助读者建立起对嵌入式系统技术的基础理论和实践能力。无论是初学者还是有一定基础的读者,都可以从中获得丰富的知识和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值