登录  | 立即注册

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

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 秒表及寻光萤火虫焊接

[复制链接]
发表于 2022-1-14 21:48:29 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51单片机
学习安排: 秒表程序的编写与完善
开始时间: 2022-01-12
结束时间: 2022-01-14
在12号到14号期间,由于私事略多,对单片机的学习较少。这期间,我学习并编写了秒表程序但亮度较低,改了好久也不见成效,但还好经大佬指点把它完善了。再者,我买了一套寻光萤火虫的元件进行焊接,当然也有根据商家给的原理图在学习它的原理。后面这几天我打算把后面几个实例学完,然后去学习串口通信,关于步进电机,要等到买的stc89c52到了之后再继续进行学习。
秒表程序
#include<reg52.h>
sbit KOUT4 = P2^7;
sbit KOUT3 = P2^6;
sbit KOUT2 = P2^5;
sbit KOUT1 = P2^4;
sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ADDR3 = P2^3;
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[6] = {
    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
unsigned char KeySta[4] = {
1,1,1,1
};

bit StopwatchRunning = 0;
bit StopwatchRefresh = 1;
unsigned char DecimalPart = 0;
unsigned int  IntegerPart = 0;
unsigned char T0RH = 0;
unsigned char T0RL = 0;

void ConfigTimer0(unsigned int ms);
void StopwatchDisplay();
void KeyDriver();

void main()
{
EA = 1;
ENLED = 0;
        KOUT1 = 0;
        KOUT2 = 1;
        KOUT3 = 1;
        KOUT4 = 1;
ConfigTimer0(2);
ET0 = 1;
TR0 = 1;
while(1)
{
if(StopwatchRefresh)
{
StopwatchRefresh = 0;
StopwatchDisplay();
}

KeyDriver();
}
}

void ConfigTimer0(unsigned int ms)
{
unsigned long tmp;
tmp = 32768000/12;
tmp = tmp*ms/1000;
tmp = 65536-tmp;
tmp = tmp+18;
T0RH = (unsigned char)(tmp>>8);
T0RL = (unsigned char)tmp;
TMOD&=0xF0;
TMOD|=0x01;
TH0 = T0RH;
TL0 = T0RL;

}

void StopwatchDisplay()
{
signed char i = 0;
unsigned char buf[4];

LedBuff[0] = LedChar[DecimalPart%10];
LedBuff[1] = LedChar[DecimalPart/10];
buf[0] = IntegerPart%10;
buf[1] = (IntegerPart/10)%10;
buf[2] = (IntegerPart/100)%10;
buf[3] = (IntegerPart/1000)%10;
for(i=3;i>=1;i--)
{
if(buf==0)
LedBuff[i+2]=0xFF;
else
   break;
}
for(;i>=0;i--)
{
LedBuff[i+2] = LedChar[buf];
}
LedBuff[2]&=0x7F;
}

void StopwatchAction()
{
if(StopwatchRunning)
   StopwatchRunning = 0;
else
         StopwatchRunning = 1;
         }

void StopwatchReset()
{
StopwatchRunning = 0;
DecimalPart = 0;
IntegerPart = 0;
StopwatchRefresh = 1;
}

void KeyDriver()
{
unsigned char i;
static unsigned char backup[4] = {1,1,1,1};

for(i=0;i<4;i++)
{
if (backup!=KeySta)
{
if (backup!=0)
{
if(i==1)
  StopwatchReset();
else if(i==2)
  StopwatchAction();
        }
backup = KeySta;
}
}
}

void KeyScan()
{
static unsigned int a = 0;
unsigned char i;
static unsigned char keybuf[4] = {
0xFF, 0xFF, 0xFF, 0xFF
};
ADDR0 = 1;
ADDR1 = 1;
ADDR2 = 1;
ADDR3 = 1;
keybuf[0] = (keybuf[0]<<1) | ADDR0;
keybuf[1] = (keybuf[1]<<1) | ADDR1;
keybuf[2] = (keybuf[2]<<1) | ADDR2;
keybuf[3] = (keybuf[3]<<1) | ADDR3;
for(i=0; i<4; i++)
{
if(keybuf==0x00)
{
KeySta = 0;
}
else if(keybuf==0xFF)
{
KeySta = 1;
}
}
P0 = 0xFF;
switch(a)
{
case 0:ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;a++0 = LedBuff[5];break;
case 1:ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;a++0 = LedBuff[4];break;
case 2:ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;a++0 = LedBuff[3];break;
case 3:ADDR2 = 0;ADDR1 = 1;ADDR0 = 1;a++0 = LedBuff[2];break;
case 4:ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;a++0 = LedBuff[1];break;
case 5:ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;a = 00 = LedBuff[0];break;
default: break;
}

}
void LedScan()
{
static unsigned int i = 0;
P0 = 0xFF;
switch(i)
{
case 0:ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;i++0 = LedBuff[5];break;
case 1:ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;i++0 = LedBuff[4];break;
case 2:ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;i++0 = LedBuff[3];break;
case 3:ADDR2 = 0;ADDR1 = 1;ADDR0 = 1;i++0 = LedBuff[2];break;
case 4:ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;i++;P0 = LedBuff[1];break;
case 5:ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;i = 0;P0 = LedBuff[0];break;
default: break;
}
}
void StopwatchCount()
{
if(StopwatchRunning)
{
DecimalPart++;
if(DecimalPart>=100)
{
DecimalPart = 0;
IntegerPart++;
if(IntegerPart>=10000)
{
IntegerPart = 0;
}
}
StopwatchRefresh = 1;
}
}

void InterruptTimer0() interrupt 1
{
static unsigned char tmr10ms = 0;

TH0 = T0RH;
TL0 = T0RL;
LedScan();
KeyScan();
tmr10ms++;
if(tmr10ms>=5)
{
tmr10ms = 0;
StopwatchCount();
}
}

寻光萤火虫实图
QQ图片20220114214656.jpg      动起来傻傻的,哈哈
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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