c#实现51单片机频率计的代码分享(数字频率计设计)

 更新时间:2013年12月26日 10:44:52   作者:  
c#实现51单片机频率计的代码分享,大家参考使用吧

复制代码 代码如下:

#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#简单判断字符编码的方法

    这篇文章主要介绍了C#简单判断字符编码的方法,可实现判断utf-8,unicode,ansi等编码的功能,简单实用,需要的朋友可以参考下
    2016-06-06
  • C#学习笔记整理_变量等基础语法(必看篇)

    C#学习笔记整理_变量等基础语法(必看篇)

    下面小编就为大家带来一篇C#学习笔记整理_变量等基础语法(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • C#提取PDF中指定文本与图片坐标的示例代码

    C#提取PDF中指定文本与图片坐标的示例代码

    这篇文章主要为大家详细介绍了如何使用国产PDF库通过C# 提取PDF中指定文本或图片的坐标位置(X, Y轴),感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C# Lambda表达式select()和where()的区别及用法

    C# Lambda表达式select()和where()的区别及用法

    这篇文章主要介绍了C# Lambda表达式select()和where()的区别及用法,select在linq中一般会用来提取最后筛选的元素集合,在lambda表达式中通常用where得到元素集合,需要的朋友可以参考下
    2023-07-07
  • 详解C#中String.ToCharArray方法的使用

    详解C#中String.ToCharArray方法的使用

    这篇文章主要为大家详细介绍了C#中String.ToCharArray方法的使用的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • C#将PDF文档转换为Markdown文档的代码实现

    C#将PDF文档转换为Markdown文档的代码实现

    将PDF文件转换为Markdown格式是一个非常实用的需求,尤其是在需要将内容从固定布局的PDF文件中提取出来,并转换为更易于编辑和处理的文本格式时,本文将介绍如何通过C#代码将PDF文档转换Markdown(MD)文档,需要的朋友可以参考下
    2024-10-10
  • C#滚动字幕的实现方法

    C#滚动字幕的实现方法

    这篇文章主要介绍了C#滚动字幕的实现方法,主要讲述了Graphics.DrawString函数的应用方法,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • C#实现Ruby的负数索引器

    C#实现Ruby的负数索引器

    这篇文章主要介绍了C#实现Ruby的负数索引器的相关代码和使用方法,非常简单实用,需要的朋友可以参考下
    2016-07-07
  • C#强制类型转换小结

    C#强制类型转换小结

    任何一门编程语言均有相关数据类型。C#也不例外,不过转换过程要注意小类型能转换成大类型,但大类型一般不能转换成小类型,下面小编给大家详解C#强制类型转换小结,需要的朋友参考下吧
    2017-07-07
  • 在C#中如何使用正式表达式获取匹配所需数据

    在C#中如何使用正式表达式获取匹配所需数据

    本文给大家分享C#中如何使用正式表达式获取匹配所需数据 ,非常实用,对正则表达式获取匹配相关知识感兴趣的朋友一起学习吧
    2016-03-03

最新评论