ki-ljl / AT89C52-examples

AT89C52单片机实验程序:发光二极管的亮灭、多个发光二极管分组循环交替亮灭、外部中断控制数码管循环显示0~9、定时器控制发光二极管的亮灭+简单输出连续矩形脉冲。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

AT89C52-examples

AT89C52单片机实验程序:发光二极管的亮灭、多个发光二极管分组循环交替亮灭、外部中断控制数码管循环显示0~9、定时器控制发光二极管的亮灭+简单输出连续矩形脉冲。

1. 发光二极管的亮灭

Description

用keil编写程序实现下列功能:

在P1.0端口接一个发光二极管D1,使D1不停地一亮一灭,亮灭的时间间隔为0.2s。

要求:用Proteus仿真验证:

  1. 单片机选用AT89C52
  2. 提交仿真过程、结果和源程序

实验电路图

在这里插入图片描述

2. 多个发光二极管分组循环交替亮灭

Description

设计单片机与8个发光二极管和4个按键相连的Proteus仿真电路,编程实现如下功能:

  1. 按下K1,8个灯按照一定频率同时闪烁,频率自定
  2. 按下K2,使某个灯闪烁10次后,转到下个灯闪烁,从左往右(D1到D8)循环不停
  3. 按下K3,相邻的4个LED灯为一组,两组LED灯每隔约0.5秒交替发亮一次,周而复始
  4. 按下K4,从右往左依次点亮,然后全灭,不断循环

实验电路图

在这里插入图片描述

实验分析

  1. K1按下,八个灯同时闪烁。即P1在0xff与0x00之间交替取值。
  2. K2按下,某个灯闪烁十次,然后从左往右循环。P1初始时为0xfe,然后P1在0xfe与0xff之间交替取值十次,即最左边的灯闪烁十次,然后右移,第二个做同样的操作,直到第八个灯也闪烁了十次,最后再左移即可。
  3. K3按下,相邻的4个LED为一组,交替发亮。即P1在0xf0与0x0f之间交替取值。
  4. K4按下,从右往左依次点亮,然后全灭,不断重复。从D8到D1,不断从1变为0即可。

3. 外部中断控制数码管循环显示0~9

Description

设计单片机的Proteus仿真电路,实现如下功能:

  1. 控制P0口数码管循环显示0-9
  2. 按下上面开关,控制P2口数码管依次显示0-9
  3. 按下下面开关,控制P1口数码管依次显示0-9

实验电路图

在这里插入图片描述

实验分析

  1. 控制P0口数码管循环显示0-9。使P0不断取DSY_CODE中的值,然后每次改变前延时。
  2. 外部中断INT0发生时,控制P2口数码管依次显示0-9。开启外部中断0,然后在中断处理函数里面使P2不断取DSY_CODE中的值,不循环。
  3. 外部中断INT1发生时,控制P1口数码管依次显示0-9。开启外部中断1,同时设置高优先级,中断处理函数同上。

4. 定时器控制发光二极管的亮灭+简单输出连续矩形脉冲

Description

设计单片机的Proteus仿真电路,实现如下功能:

  1. P1口控制8个发光二极管,P0连接数码管
  2. 利用定时器/计数器T0产生定时,采用中断方式,让8个发光二极管每隔1s依次点亮,全亮后全灭,再次开始循环
  3. 数码管从1开始,每点亮一个发光二极管,显示+1,显示9时二极管全灭,再次开始循环
  4. 系统的晶振频率fosc=12MHz,用Proteus仿真验证如下连续矩形脉冲:

在这里插入图片描述

实验电路图

在这里插入图片描述

实验分析

  1. 八个发光二极管每隔1s依次点亮,同时数码管从1显示到8,9时全灭,然后不断循环。采用定时器0中断,事先写好依次点亮时的八种状态,然后每隔一秒P1变换到下一个状态。
  2. 高电平40ms,低电平360ms,采用定时器1中断,每次定时40ms,40ms时由高电平到低电平,400ms时候翻转即可。

About

AT89C52单片机实验程序:发光二极管的亮灭、多个发光二极管分组循环交替亮灭、外部中断控制数码管循环显示0~9、定时器控制发光二极管的亮灭+简单输出连续矩形脉冲。

License:MIT License


Languages

Language:C 100.0%