找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 911|回复: 5
收起左侧

新手学到51单片机定时器:写一个定时器1计时1秒,让P2口灯以不同频率闪烁

[复制链接]
ID:180919 发表于 2023-3-25 17:09 | 显示全部楼层 |阅读模式
新手学到51单片机定时器:写一个定时器1计时1秒,让P2口灯以不同频率闪烁,各位前辈看到多指教下:
#include<reg51.h>
typedef unsigned char u8;
typedef unsigned int  u16;
u8 a,b;
sbit led0 = P2^0;
sbit led1 = P2^1;
sbit led2 = P2^2;
sbit led3 = P2^3;

void time0_init(void)
{
   TMOD = 0x01;   
   TH0  = 0x4b;
   TL0  = 0xfc;
   TR0  = 1;
}

void time(void)
{           
        if(TF0 == 1)
                {               
                     TH0  = 0x4b;
                     TL0  = 0xfc;
                     TF0  = 0;
                      a++;                        
                }
               
       if(a == 20)
            {
                   a = 0;
                   b++;                        
            }           
}

void d0(void)
{      
        led0 = b % 2;
        led1 = ~led0;
        led3 = b % 4;
      //led3 = b % 60;         
}

void main()
{        
        time0_init();
        while(1)
        {   
                 time();
                d0();                                
        }         
}


回复

使用道具 举报

ID:404160 发表于 2023-3-28 11:39 | 显示全部楼层
main()函数里死循环内d0()一句,改为:if a==0 d0();
回复

使用道具 举报

ID:1042619 发表于 2023-3-29 19:02 | 显示全部楼层
建议用T2是24位定时器的8051,STC8H8K64U, USB直接仿真,定时1S只需要中断1次
回复

使用道具 举报

ID:180919 发表于 2023-3-31 10:43 | 显示全部楼层
飞云居士 发表于 2023-3-28 11:39
main()函数里死循环内d0()一句,改为:if a==0 d0();

谢谢!
回复

使用道具 举报

ID:180919 发表于 2023-3-31 10:46 | 显示全部楼层
大漠孤烟001 发表于 2023-3-29 19:02
建议用T2是24位定时器的8051,STC8H8K64U, USB直接仿真,定时1S只需要中断1次

那单片机效率就高了。
回复

使用道具 举报

ID:180919 发表于 2023-3-31 11:01 | 显示全部楼层
大漠孤烟001 发表于 2023-3-29 19:02
建议用T2是24位定时器的8051,STC8H8K64U, USB直接仿真,定时1S只需要中断1次

谢谢前辈介绍,STC8H8K64U这款单片机确实不错,作为我的下一目标。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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