51c语言单片机io口控制实验报告,单片机I/O口控制实验

实验 单片机I/O 口控制实验

一. 实验目的

利用单片机的P1 口作IO 口,使用户学会利用P1 口作为输入和输出口。

二. 实验设备及器件

IBM PC 机 一台

DP-51PROC 单片机综合仿真实验仪 一台

三. 实验内容

1. 编写一段程序,用P1 口作为控制端口,使D1 区的LED 轮流亮。

2. 编写一段程序,用P1.0~P1.6 口控制LED,P1.7 控制LED 的亮和灭(P1.7 接按

键,按下时LED 亮,不按时LED 灭。)

四. 实验要求

学会使用单片机的P1 口作IO 口,如果有时间用户也可以利用P3 口作IO 口来做

该实验

五. 实验步骤

1. 用导线把A2 区的J61 接口与D1 区的 J52 接口相连。原理如图3.2A 所示。

3fb035f09885e2752a52801628186da8.png

图3.2 实验2 原理图

2. 先编写一个延时程序。

3. 将LED 轮流亮的程序编写完整并调试运行。

4. 使用导线把A2 区的J61 接口的P1.0~P1.6 与D1 区的 J52 接口的LED1~LED7

相连,另外A2 区J61 接口的P1.7 与D1 区的J53 的KEY1 相连。原理如图3.2B

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基本的51单片机波形发生器的程序,可供参考: ```c #include <reg51.h> #define FREQ 1000 // 波形频率 #define AMP 127 // 波形幅度 unsigned char wave[] = { // 正弦波数据表 127, 136, 145, 154, 163, 172, 180, 189, 197, 205, 213, 220, 228, 235, 241, 247, 253, 258, 263, 268, 272, 276, 279, 282, 285, 287, 288, 290, 290, 291, 291, 291, 290, 290, 288, 287, 285, 282, 279, 276, 272, 268, 263, 258, 253, 247, 241, 235, 228, 220, 213, 205, 197, 189, 180, 172, 163, 154, 145, 136, 127, 118, 109, 100, 91, 82, 74, 65, 57, 49, 41, 34, 26, 19, 13, 7, 1, 0, 0, 0, 1, 1, 3, 4, 6, 9, 12, 15, 19, 23, 28, 33, 38, 44, 50, 57, 64, 71, 79, 87, 95, 104, 113, 122, 131, 141, 151, 161, 171, 181, 191, 201, 211, 221, 230, 240, 249, 258, 267, 275, 284, 292, 299, 307, 314, 321, 327, 333, 339, 344, 349, 353, 357, 360, 363, 365, 367, 368, 369, 369, 369, 368, 367, 365, 363, 360, 357, 353, 349, 344, 339, 333, 327, 321, 314, 307, 299, 292, 284, 275, 267, 258, 249, 240, 230, 221, 211, 201, 191, 181, 171, 161, 151, 141, 131, 122, 113, 104, 95, 87, 79, 71, 64, 57, 50, 44, 38, 33, 28, 23, 19, 15, 12, 9, 6, 4, 3, 1, 1, 0, 0, 0, 1, 7, 13, 19, 26, 34, 41, 49, 57, 65, 74, 82, 91, 100, 109, 118 }; void main() { unsigned char i = 0; // 波形数据计数器 TMOD = 0x01; // 定时器0工作在模式1 TH0 = 0 - (FREQ / 1000000.0 * 12 / 2); // 定时器0初始值 TL0 = TH0; // 定时器0初始值 TR0 = 1; // 启动定时器0 P1 = AMP; // 初始化输出端 while (1) { if (TF0) { // 定时器0溢出中断 TF0 = 0; // 清除定时器0溢出标志 TH0 = 0 - (FREQ / 1000000.0 * 12 / 2); // 重新设置定时器0初始值 TL0 = TH0; // 重新设置定时器0初始值 P1 = wave[i++]; // 输出波形数据 if (i >= sizeof(wave)) { // 数据计数器溢出 i = 0; // 重新开始输出 } } } } ``` 上述程序实现了一个输出正弦波的波形发生器,输出频率和幅度可以自行修改。在程序中,通过定时器0的溢出中断来触发波形数据的输出,通过P1输出波形数据。在实际的应用中,可以根据需要对程序进行调整和优化。 关于Proteus仿真,您可以通过建立相应电路并将程序下载到单片机中进行仿真。在仿真过程中,可以通过示波器等工具来观察波形输出情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值