找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3252|回复: 0
打印 上一主题 下一主题
收起左侧

单片机定时器流水灯的设计

[复制链接]
跳转到指定楼层
楼主
1、基本内容
IF  (已经准备有protues仿真文件和HEX文件的)
    (1)进行仿真演示。
(1)认真理解并读懂程序,将所给程序在KEIL中编译,产生HEX文件;
(2)将程序烧写到实验箱中的单片机中;
(3)连接实验箱中的硬件:

序号        单片机(A2区)        LED灯(D1区)        备注
1        J61(P10~P17)        J52(LED1~ LED8)        

(4)运行程序,在实验箱中实现程序功能。

2、扩展内容:
(1)所给程序中定时器T1采用查询方式,请修改程序:用定时器T0,中断方式,实现1S流水灯。

四、实验程序
//*********************************************************************************
//程序:ex4.c
//功能:查询方式实现间隔1s的流水灯程序。8个发光二极管依次顺序点亮,采用循环移位
//函数_crol_(m,1)实现
//实验箱上D1区J52接P1
//*********************************************************************************
#include<reg51.h>                                                /*包含头文件REG51.H*/
#include <intrins.h>                                        /*包含函数_crol_(m,1)的头文件*/
#define uchar unsigned char
#define LED P1                                                /*定义8个LED接至P1口*/
#define Count 50000                                        /* T1方式1定时50ms的计数值*/
uchar Temp1, Temp2;
void Delay1s();                                                //1s延时函数声明
void main()                                                        //主程序
{
        TMOD=0x10;                                                //设置T1为定时器、方式1
        LED=0xff;                                                //8个LED全部熄灭
        Temp1=0xfe;                                                //点亮最上面的LED
        LED=Temp1;
        while(1)
        {
                Delay1s();                                        //调用1s延时函数
                Temp2=_crol_(Temp1,1);                 //采用_crol_(m,1)实现单只LED从上到下依次点亮
                Temp1=Temp2;
                LED=Temp2;
        }
}
//*********************************************************************************
//函数名:Delay1s
//函数功能:利用T1定时、方式1实现1s延时,采用查询方式实现
//*********************************************************************************
void Delay1s()
{
        uchar i;
        for(i=0;i<0x14;i++)                                        //设置20次循环次数
        {            
                TH1=(65536-Count)/256;                 //T1的高8位初值
                TL1=(65536-Count)%256;                //T1的低8位初值
                TR1=1;                                                //启动T1
                while(!TF1);                                         //查询计数是否溢出,即定时50ms时间到了吗?
                TF1=0;                                                //50ms定时时间到,将T1溢出标志位TF1清零
        }
}

1.仿真图:

51hei图片20201202182426.png (648.69 KB, 下载次数: 71)

51hei图片20201202182426.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表