📄 text1.c
字号:
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit RR = P3^7;//小数点显示控制
sbit ONE = P1^2;//变速开关1
sbit TWO = P1^3;//变速开关2
sbit THREE = P1^6;//变速开关3
sbit FOUR = P1^7;//变速开关4
sbit LIGHTA = P1^0;//里程指示灯
sbit LIGHTB = P1^1;//速度指示灯
sbit CHANGE = P3^0;//里程测速转换
sbit ALERM = P3^1;// 报警开关
uint data distance;//里程计数
uint data speed;//速度计数
uint data times;//轮子转圈数
uchar data sign;//四开关标志
uint data minu;//时间数
uchar code dis_7[11] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xFF};//共阴LED段码表
uchar code control[3] = {0xFD,0xFB,0xF7};//由低到高控制字
uchar data show[3] = {0x00,0x00,0x00};
/*延时1ms*/
delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
/*里程显示函数*/
showDistance()
{
uchar k;
uint dis = distance;
show[2] = dis/100;//百位
show[1] = (dis%100)/10;//十位
show[0] = (dis%100)%10;//个位
LIGHTA = 0;
while(1)
{
for(k=0;k<4;k++)
{
P0 = dis_7[show[k]];
P2 = control[k];
delay(1);
}
}
}
/*超速警报函数*/
overSpeed()
{
ALERM = 0;
}
/*速度显示函数*/
showSpeed()
{
uchar m;
uint sp = speed;
show[2] = sp/100;//百位
show[1] = (sp%100)/10;//十位
show[0] = (sp%100)%10;//个位
LIGHTB = 0;
if(speed>50)
overSpeed();
while(1)
{
for(m=0;m<4;m++)
{
P0 = dis_7[show[m]];
P2 = control[m];
delay(1);
}
}
}
/*定时器开关函数*/
void calDistance(void) interrupt 2
{
uint n;
TR0 = 0;
n = minu/4000;//n为秒数
distance = times*sign/1000;//distance为千米数
speed = times*sign/n;//米每秒
TR1 = 1;
}
/*轮圈的圈数计数函数*/
void circle(void) interrupt 0
{
times++;
}
/*计数器T0中断函数*/
void counter(void) interrupt 1
{
minu++;//加一个250us
}
/*初始化函数*/
init()
{
IE = 0;
TMOD = 0x02;
TR0 = 0;
TH0 = 0x06;
TL0 = 0x06;
IT1 = 0;IT0 = 0;
P0 = 0xff;P2 = 0xff;
P1 = 0xff;P3 = 0xff;
RR = 1;
EA = 1;EX0 = 1;EX1 = 1;ET0 = 1;
}
main()
{
init();
while(1)
{
if(ONE == 0)
sign = 3;
else if(TWO == 0)
sign = 4;
else if(THREE == 0)
sign = 5;
else if(FOUR == 0)
sign = 6;
if(CHANGE == 0)
showSpeed();
else
showDistance();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -