c#实现51单片机频率计的代码分享(数字频率计设计)_C#教程-查字典教程网
c#实现51单片机频率计的代码分享(数字频率计设计)
c#实现51单片机频率计的代码分享(数字频率计设计)
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:#include#defineucharunsignedchar#defineuintunsignedint#define...

复制代码 代码如下:

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

//按键

sbit button=P1^7;

//LED

sbit led2=P3^5;

sbit led3=P3^7;

//数码管位选

sbit c0 = P3^0;

sbit c1 = P3^1;

sbit c2 = P3^2;

sbit c3 = P3^3;

//数码管段码

uchar code dm[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

uchar wm[]={0,0,0,0};

ulong pl;

uchar mode;

void delay3ms(void) //误差 0us

{

unsigned char a,b,c;

for(c=1;c>0;c--)

for(b=176;b>0;b--)

for(a=7;a>0;a--);

}

void smg()

{

static uchar i=0;

c0=1;c1=1;c2=1;c3=1;

P1 = 0XFF;

switch(i)

{

case 0:c0=0;

break;

case 1:c1=0;

break;

case 2:c2=0;

break;

case 3:c3=0;

break;

}

P1 = dm[wm[i]];

i++;

if(i>3)

{

i=0;

}

}

void ledmode()

{

switch(mode)

{

case 0:led2=led3=0;

break;

case 1:led2=1;led3=0;

break;

case 2:led2=0;led3=1;

break;

case 3:led2=led3=1;

break;

}

}

void key()

{

static uchar num;

delay3ms();

button=1;

switch(num)

{

case 0:if(!button)

{

num=1;

}

break;

case 1:if(!button)

{

if(mode<3)

{

mode++;

}

else

{

mode=0;

}

num=2;

}

else

{

num=0;

}

break;

case 2:if(button)num=3;

break;

case 3:if(button)num=0;

break;

}

}

void timeinit()

{

TMOD=0x15; //设置T0T1控制字

TH0=0x00;

TL0=0x00;

TH1=0xfC;

TL1=0x18;

ET0=1; //定时器0中断允许

ET1=1;

TR0=1; //启动T0计数

TR1=1; //并启动T1计数

EA=1; //CPU开中断

}

void main()

{

timeinit();

while(1)

{

smg();

ledmode();

key();

}

}

void t1()interrupt 3

{

static uint time;

TR0=0;

TH1=(65536-10000)/256;

TL1=(65536-10000)%256;

time++;

if(time>99)

{

time=0;

pl=TH0*256+TL0;

wm[0]=(pl/1000)%10;

wm[1]=(pl/100)%10;

wm[2]=(pl/10)%10;

wm[3]=pl%10;

TH0=TL0=0;

}

TR0=1;

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类