登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 交通灯

[复制链接]
发表于 2023-2-11 17:26:52 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 注重
开始时间: 2023-01-06
结束时间:
#include <STC12C5A60S2.H>

unsigned char code LedChar[] = {  
    0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[7] = {  
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
bit flag1s = 1;         
unsigned char T0RH = 0;  
unsigned char T0RL = 0;

void ConfigTimer0(unsigned int ms);
void TrafficLight();

void main()
{
    EA = 1;      
    P11 = 0;   
        ConfigTimer0(1);

    while (1)
    {
        if (flag1s)
        {
            flag1s = 0;
            TrafficLight();
        }
    }
}
void ConfigTimer0(unsigned int ms)
{
    unsigned long tmp;

    tmp = 32000000 / 12;      
    tmp = (tmp * ms) / 1000;  
    tmp = 65536 - tmp;        
    tmp = tmp + 13;           
    T0RH = (unsigned char)(tmp>>8);
    T0RL = (unsigned char)tmp;
    TMOD &= 0xF0;  
    TMOD |= 0x01;  
    TH0 = T0RH;   
    TL0 = T0RL;
    ET0 = 1;  
    TR0 = 1;
}

void TrafficLight()
{
    static unsigned char color = 2;
    static unsigned char timer = 0;

    if (timer == 0)
    {
        switch (color)
        {
                        case 0: color = 0; timer = 60; LedBuff[6] = 0xE7; break;
                        case 1: color = 1; timer = 60; LedBuff[6] = 0xFC; break;
                        case 2: color = 2; timer = 60; LedBuff[6] = 0x3F; break;
                                       
        }
    }
    else
    {
        timer--;
    }
    LedBuff[1] = LedChar[timer%10];
    LedBuff[0] = LedChar[timer/10];
}

void LedScan()
{
    static unsigned char i = 0;

    P0 = 0xFF;            
    P2 = (P1 & 0xF8) | i;  
    P0 = LedBuff[i];      
    if (i < 6)        
        i++;
    else
        i = 0;
}

void InterruptTimer0() interrupt 1
{
    static unsigned int tmr1s = 0;  

    TH0 = T0RH;
    TL0 = T0RL;
    LedScan();
    tmr1s++;
    if (tmr1s >= 1000)
    {
        tmr1s = 0;
        flag1s = 1;
    }
}

好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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