• 51单片机定时器简单示例


    第一次写博客这玩意,不太会,算了,直接粘代码吧。

     1 #include <reg52.h>
     2 #include <intrins.h> //头文件,将会用到循环右移
     3 //宏定义
     4 #define uchar unsigned char
     5 #define uint  unsigned int
     6 //位、变量声明
     7 sbit led1 = P1^0;
     8 sbit dula = P2^6;
     9 sbit wela = P2^7;
    10 uchar counter_ms, counter_s, led_flow = 0xfe;
    11 uchar code digitron_data[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f };
    12 //延时函数
    13 void delay(uint z)
    14 {
    15     uint x, y;
    16     for (x = 0; x < z; x++)
    17         for (y = 0; y < 114; y++);
    18 }
    19 //流水灯函数    
    20 void display_led ()
    21 {
    22     while(1) {
    23             led_flow = _cror_(led_flow, 1);
    24             P1 = led_flow;
    25             delay(500);//调用延时函数
    26     }
    27 }
    28 //数码管函数
    29 void display_digitron(uchar i)
    30 {
    31     uchar tens, ones;
    32     tens = i / 10;//求模得到十位
    33     ones = i % 10;//求余得到个位
    34     
    35     P0   = 0xff;//使所有数码管熄灭
    36     wela = 1;
    37     P0   = 0xfe;
    38     wela = 0;
    39     
    40     dula = 1;
    41     P0   = digitron_data[tens];
    42     dula = 0;
    43     delay(1);
    44     
    45     P0   = 0xff;
    46     wela = 1;
    47     P0   = 0xfd;
    48     wela = 0;
    49     
    50     dula = 1;
    51     P0   = digitron_data[ones];
    52     dula = 0;
    53     delay(1);
    54 }
    55 //定时器初始化函数
    56 void timer_init()
    57 {
    58     TMOD = 0x10;//TMOD的地址是0x89,不能被8整除,只能对字节操作,不能位操作
    59     TH1  = 0x4c;
    60     TL1  = 0x00;
    61     TR1  = 1;    //TCON的地址是0x88,可以对位操作
    62 }
    63 //主函数main
    64 void main()
    65 {
    66     timer_init();//调用定时器初始化函数
    67     while(1) {
    68         if (TF1 == 1) {
    69             TF1 = 0;
    70             TH1 = 0x4c;
    71         TL1 = 0x00;
    72             counter_ms++;    
    73         }
    74         if (counter_ms == 20) {//counter_ms累加20次是1秒
    75             counter_ms = 0;
    76             counter_s++;
    77         }
    78         if (counter_s ==60) {//counter_s累加60次是1分钟
    79             wela = 1;
    80             P0   = 0xff;
    81             wela = 0;
    82             TR1 = 0;
    83             display_led();//调用流水灯函数    
    84         /*
    85         led_flow = _cror_(led_flow, 1);
    86             P1       = led_flow;
    87             delay(500);
    88         */
    89         } else {
    90         display_digitron(counter_s);//调用数码管函数
    91         }
    92     }
    93 }
  • 相关阅读:
    CSP-S2020总结
    题解-P6687 论如何玩转 Excel 表格
    题解-UVA12995 【Farey Sequence】
    题解-P4159 [SCOI2009] 【迷路】
    题解-SP2916【GSS5
    102. 二叉树的层序遍历
    力扣 160 相交链表 快慢指针 双指针
    3. 无重复字符的最长子串 滑动窗口
    最大连续1的个数 III
    B树和B+树
  • 原文地址:https://www.cnblogs.com/yllinux/p/6870171.html
Copyright © 2020-2023  润新知