登录  | 立即注册

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

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 交通灯(电开版本)

[复制链接]
发表于 2022-1-29 23:17:34 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 按时学习
开始时间: 2022-01-26
结束时间: 2022-01-26
其实到后面看都是模块化的东西,各行翻译都在图片上,无聊的可以自己对照看看电开的板子复制下面我写的就行了

#include<reg52.h>
sbit ENLED = P1^1;
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 flagls=1;
unsigned char T0RH=0;
unsigned char T0RL=0;
void ConfigTimer0(unsigned int ms);
void TrafficLight();
void main()
{
EA=1;
ENLED=0;
ConfigTimer0(1);
while(1)
{
if(flagls)
{flagls=0;
TrafficLight();
}
}
}
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp;
tmp=32768000/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=1;
timer=2;
LedBuff[6]=0xE7;
break;
case 1:
color=2;
timer=29;
LedBuff[6]=0xFC;
break;
case 2:
color=0;
timer=39;
LedBuff[6]=0x3F;
break;
default:
break;
}
}
else
{
timer--;
}
LedBuff[1]=LedChar[timer%10];
LedBuff[0]=LedChar[timer/10];
}
void LedScan()
{
static unsigned char i=0;
P0=0xFF;
P2=(P2&0xF8)|i;
P0=LedBuff[i];
if(i<6)
i++;
else i=0;
}
void InterruptTimer() interrupt 1
{
static unsigned int tmrls=0;
TH0=T0RH;
TL0=T0RL;
LedScan();
tmrls++;
if(tmrls>=1000)
{
tmrls=0;
flagls=1;
}
}



1643469265186.jpg
1643469278099.jpg
1643469285836.jpg
1643469295761.jpg
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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