⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 电动自行车.c

📁 电动自行车控制程序,包括功率显示,刹车,自动巡航等功能,已经调试,现在我正在使用
💻 C
字号:
/****************************************
	AT89S51电动自行车程序
	  作者:yuri
	  时间:2006.12.1-2006.12.22
	  QQ:285123356
	  E-mail:Yuri_su@163.com
-----------------------------------------
程序,分??分:
1-定义接口
2-调速中断0
3-显示子程序
4-主程序
****************************************/
#include<reg51.h>
#define uchar unsigned char //定义
#define uint unsigned int
sbit P17 = P1^7; //mover
//sbit P11 = P1^1;
//sbit P12 = P1^2;
//sbit P13 = P1^3;
sbit rin = P1^0;	 //ring
//sbit k1= P3^5; //按键
//sbit k2= P3^6;
uchar scale,tt,j;//用于保存占空比的输出0的时间份额,总共255份
                //tt用来保存当前时间在一秒中的比例位置
               //模拟PWM输出控制灯的255个亮度级别

void delay(uchar k)
	{
		while(k--);	
	}

void off()
{
   	P0=0x00;
	P2=0x00;
}

void display()   //动态扫描显示
   {
   uchar code duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,};///////-----共阳
   uchar code zhi[6]={0x01,0x02,0x04,0x08,0x10,0x20};
   uint c=0,d=0,e=0,f=0,sa=0,sb=0,t,q;
	sa=scale%10;
	q=scale/10;
	sb=q%10;
	q=q/10;
    c=q%10;  //个位分数
	q=q/10;
    d=q%10;  //十位分数
	q=q/10;
    e=q%10; //个位时数
	q=q/10;
    f=q%10; //十位时数
	t=25;//************	delay time
    off();
	P2=zhi[3];   //个位分数段显示
    P0=duan[c];  //个位分数字显示
    delay(t);//延时
    off();
	P2=zhi[2];   //十位分数段显示
    P0=duan[d];  //十位分数字显示
    delay(t);//延时
    off();
	P2=zhi[1];   //个位时数段显示
    P0=duan[e];  //个位时数字显示
    delay(t);
    off();
	P2=zhi[0];  //十位时数段显示
    P0=duan[f]; //十位时数字显示
    delay(t);
    off();
	P2=zhi[5]; //十位秒
	P0=duan[sa];
    delay(t);
	off();
	P2=zhi[4];
	P0=duan[sb];
    delay(t);
	off();
	}	
void main() // 主程序
{
//uchar i;
PA=0;
P2=0xff;
//P3=0x00;
P0=0x00;
	EA=1; 
	TMOD=0x02;		//*T0定时器方式1* 
	ET0=1;
	TR0=1;
TH0=0xf4; //赋T2的预置值,溢出1次是60uS钟
TL0=0xf4;
scale=1;
//TR1=1; //启动定时器
//ET1=1; //打开定时器2中断
//EA=1; //打开总中断
while(1) //程序循环
{ //主程序在这里就不断自循环,实际应用中,这里是做主要工作
//for(n=0;n<50000;n++)red=1; //每过一会儿就自动加一个档次的亮度
//red=0;
//scale=995;
//delay(2000);
if(k1==0)
scale++;

if(k2==0)
{
if(scale==1)scale=255;
scale--;
}
if(scale==255)scale=0;

display();
}
}
//1/1200秒定时器2中断
void timer0() interrupt 1 using 1
{
TF0=0;
tt++;
	if(tt==255) //开始输出低电平
		{
		tt=1;
		P17=1;
		}
	if(scale!=0){ //这里加这一句是为了消除灭灯状态产生的鬼影
		P17=1;
		}
	if(scale>tt){ //按照当前占空比切换输出高电平
		P17=0;
		} 
}
/*
void timer2() interrupt 2
{
   dispaly();
}	 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -