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

📄 频率计单片机.c

📁 这是本人参加电子设计竞赛过程中编写的几个单片机程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************/
/**                单片机小系统测试程序                 **/
/**                作者:关永峰							**/
/**                时间:20058/11/19                    **/
/**        National University of Defence Technology    **/
/**                   0731-4573493                      **/
/*********************************************************/

#include <absacc.h>
#include <reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint8 unsigned char
#define uint16 unsigned int
#define ulong unsigned long

#define LED1 XBYTE [0xA000]   //数码管地址
#define LED2 XBYTE [0xA001]
#define LED3 XBYTE [0xA002]
#define LED4 XBYTE [0xA003]
#define LED5 XBYTE [0xA004]
#define LED6 XBYTE [0xA005]
#define LED7 XBYTE [0xA006]
#define LED8 XBYTE [0xA007]
#define DATA1 XBYTE [0xA400]
#define DATA2 XBYTE [0xA800]
#define DATA3 XBYTE [0xc800]
#define KEY XBYTE [0xA100]  //键盘地址
#define lcdDl XBYTE [0xA201] //左半边液晶数据地址
#define lcdDr XBYTE [0xA301] //右半边液晶数据地址
#define lcdlCommand XBYTE [0xA200]//左半边液晶命令地址
#define lcdrCommand XBYTE [0xA300]//右半边液晶命令地址
//uchar code worddata2[11]="0123456789";
uchar code zifu1[16] = "   frequency    ";
uchar code zifu2[16] = "    period      ";
uchar code zifu3[16] = "   pulse wide   ";
uchar code zifu4[16] = "   zhan kong    ";
uchar code zifu5[16] = "   amptitude    ";
uchar code zifu6[16] = "   self-check   ";
uchar code zifu7[16] = " outside input  ";
uchar code zifu8[16] = "  initializing  ";
uchar code zifu9[16] = "refresh time:";
//uchar 	 shu[16] = "00000000000 ";
uchar code hehe[11] = "0123456789.";
uchar code zifu10[16] = "gate time:";
uchar code zifu11[16] = "                ";
/*液晶显示使用的常量*/
#define strat_yaddr 0x40
#define strat_xaddr 0xb8
#define strat_dispaddr 0xc0
#define libleng 0x5F   //字模库容量
#define dataleng 16*8  //全屏8*8点阵容量
/*扫描键盘使用的变量 */
sbit first_row = P1^4;      //键盘第一行控制
sbit second_row = P1^3;     //键盘第二行控制

sbit ADRA=P3^0;//rxd
sbit ADRB=P3^1;//txd
sbit CLR=P3^4;//t0
sbit START=P3^5;//t1
sbit CHOICE=P1^5;
sbit TF=P1^7;
sbit clock=P1^1;
sbit ioput=P1^2;
sbit cs1=P1^0;
bit first_getkey = 0,control_readkey = 0;  //读键盘过程中的标志位
bit getkey = 0; //获得有效键值标志位 等于1时代表得到一个有效键值
bit keyon = 0;  //防止按键冲突标志位
bit bbb=0;
uchar keynum = 0,gate=3;  //获得的有效按键值寄存器
uint8 jy=1,ji=0;
float FF,WW,TT,WF,ZKB,xian=0;
//char xdata NUM1[32],NUM2[32];   // uint16  xdata AD[100];
//xdata uint16 AD[100] _at_ 0x0000;DAZHI,jiyib,fuck=0,
bit a=0,kk=0,g=0,c=1;
uint8 zz=1,DACOUT,shua=1;
float xdata shuacout=0;
uint16 ADnum;
unsigned int gatecont=0;
long coutcp=0,gatetime=2500;
/*数码管显示使用的变量和常量*/
uchar lednum = 0;  //数码管显示位控制寄存器
uchar led[8] = {0,0,0,0,0,0,0,0};  //数码管显示内容寄存器
uchar code segtab[28] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xff,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //七段码段码表
                      // "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "P" ,"black" 
//8*8点阵ASCII全部字符表
uchar code ASCII[libleng][8] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*SPACE*/
                               
{0x00,0x00,0x7e,0x21,0x21,0x21,0x7e,0x00},/*A*/
                               
{0x00,0x00,0x7f,0x49,0x49,0x49,0x36,0x00},/*B*/
                               
{0x00,0x00,0x3e,0x41,0x41,0x41,0x22,0x00},/*C*/
                               
{0x00,0x00,0x7f,0x41,0x41,0x22,0x1c,0x00},/*D*/
                               
{0x00,0x00,0x7f,0x49,0x49,0x49,0x49,0x00},/*E*/
                               
{0x00,0x00,0x7f,0x09,0x09,0x09,0x01,0x00},/*F*/
                               
{0x00,0x00,0x3e,0x41,0x49,0x49,0x7a,0x00},/*G*/
                               
{0x00,0x00,0x7f,0x08,0x08,0x08,0x7f,0x00},/*H*/
                               
{0x00,0x00,0x41,0x7f,0x41,0x00,0x00,0x00},/*I*/
                               
{0x00,0x00,0x20,0x40,0x41,0x3f,0x01,0x00},/*J*/
                               
{0x00,0x00,0x7f,0x08,0x14,0x22,0x41,0x00},/*K*/
                               
{0x00,0x00,0x7f,0x40,0x40,0x40,0x40,0x00},/*L*/
                               
{0x00,0x00,0x7f,0x02,0x0c,0x02,0x7f,0x00},/*M*/
                               
{0x00,0x00,0x7f,0x04,0x08,0x10,0x7f,0x00},/*N*/
                               
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},/*O*/
                               
{0x00,0x00,0x7f,0x09,0x09,0x09,0x06,0x00},/*P*/
                               
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},/*Q*/
                               
{0x00,0x00,0x7f,0x09,0x19,0x29,0x46,0x00},/*R*/
                               
{0x00,0x00,0x46,0x49,0x49,0x49,0x31,0x00},/*S*/
                               
{0x00,0x00,0x01,0x01,0x7f,0x01,0x01,0x00},/*T*/
                               
{0x00,0x00,0x3f,0x40,0x40,0x40,0x3f,0x00},/*U*/
                               
{0x00,0x00,0x1f,0x20,0x40,0x20,0x1f,0x00},/*V*/
                               
{0x00,0x00,0x3f,0x40,0x38,0x40,0x3f,0x00},/*W*/
                               
{0x00,0x00,0x63,0x14,0x08,0x14,0x63,0x00},/*X*/
                               
{0x00,0x00,0x07,0x08,0x70,0x08,0x07,0x00},/*Y*/
                               
{0x00,0x00,0x61,0x51,0x49,0x45,0x43,0x00},/*Z*/
                               
{0x00,0x00,0x20,0x54,0x54,0x54,0x7c,0x00},/*a*/
                               
{0x00,0x00,0x7f,0x48,0x44,0x44,0x38,0x00},/*b*/
                               
{0x00,0x00,0x38,0x44,0x44,0x44,0x20,0x00},/*c*/
                               
{0x00,0x00,0x38,0x44,0x44,0x48,0x7f,0x00},/*d*/
                               
{0x00,0x00,0x38,0x54,0x54,0x54,0x18,0x00},/*e*/
                               
{0x00,0x00,0x08,0x7e,0x09,0x01,0x02,0x00},/*f*/
                               
{0x00,0x00,0x0c,0x52,0x52,0x52,0x3e,0x00},/*g*/
                               
{0x00,0x00,0x7f,0x08,0x04,0x04,0x78,0x00},/*h*/
                               
{0x00,0x00,0x00,0x44,0x7d,0x40,0x00,0x00},/*i*/
                               
{0x00,0x00,0x40,0x40,0x44,0x3d,0x00,0x00},/*j*/
                               
{0x00,0x00,0x7f,0x10,0x28,0x44,0x00,0x00},/*k*/
                                 
{0x00,0x00,0x00,0x41,0x7e,0x40,0x00,0x00},/*l*/
                               
{0x00,0x00,0x7c,0x04,0x18,0x04,0x78,0x00},/*m*/
                               
{0x00,0x00,0x7c,0x08,0x04,0x04,0x78,0x00},/*n*/
                               
{0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00},/*o*/
                               
{0x00,0x00,0x7c,0x14,0x14,0x14,0x08,0x00},/*p*/
                               
{0x00,0x00,0x08,0x14,0x14,0x14,0x7c,0x00},/*q*/
                               
{0x00,0x00,0x7c,0x08,0x04,0x04,0x08,0x00},/*r*/
                               
{0x00,0x00,0x48,0x54,0x54,0x54,0x20,0x00},/*s*/
                                
{0x00,0x00,0x04,0x3f,0x44,0x44,0x24,0x00},/*t*/
                               
{0x00,0x00,0x3c,0x40,0x40,0x20,0x7e,0x00},/*u*/
                               
{0x00,0x00,0x1c,0x20,0x40,0x20,0x1c,0x00},/*v*/
                               
{0x00,0x00,0x3c,0x40,0x30,0x40,0x3c,0x00},/*w*/
                               
{0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x00},/*x*/
                               
{0x00,0x00,0x06,0x48,0x48,0x48,0x3e,0x00},/*y*/
                               
{0x00,0x00,0x44,0x64,0x54,0x4c,0x44,0x00},/*z*/
                               
{0x00,0x00,0x00,0x01,0x02,0x04,0x00,0x00},/*`*/
                               
{0x00,0x00,0x00,0x42,0x7f,0x40,0x40,0x00},/*1*/
                               
{0x00,0x00,0x62,0x51,0x51,0x49,0x46,0x00},/*2*/
                               
{0x00,0x00,0x21,0x41,0x45,0x4b,0x31,0x00},/*3*/
                               
{0x00,0x00,0x18,0x14,0x12,0x7f,0x10,0x00},/*4*/
                               
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00},/*5*/
                               
{0x00,0x00,0x3c,0x4a,0x49,0x49,0x30,0x00},/*6*/
                               
{0x00,0x00,0x01,0x71,0x09,0x05,0x03,0x00},/*7*/
                               
{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00},/*8*/
                               
{0x00,0x00,0x06,0x49,0x49,0x29,0x1e,0x00},/*9*/
                               
{0x00,0x00,0x3e,0x51,0x49,0x45,0x3e,0x00},/*0*/  
                               
{0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00},/*-*/
                               
{0x00,0x00,0x14,0x14,0x14,0x14,0x14,0x00},/*=*/
                               
{0x00,0x00,0x01,0x02,0x08,0x10,0x20,0x00},/*\\*/
                               
{0x00,0x00,0x04,0x08,0x04,0x08,0x04,0x00},/*~*/
                               
{0x00,0x00,0x00,0x00,0x4f,0x00,0x00,0x00},/*!*/
                               
{0x00,0x00,0x3e,0x59,0x55,0x79,0x3e,0x00},/*@*/
                               
{0x00,0x00,0x14,0x7f,0x14,0x7f,0x14,0x00},/*#*/
                               
{0x00,0x00,0x24,0x2a,0x7f,0x2a,0x12,0x00},/*$*/
                               
{0x00,0x00,0x23,0x13,0x08,0x62,0x61,0x00},/*%*/
                               
{0x00,0x00,0x04,0x02,0x01,0x02,0x04,0x00},/*^*/
                               
{0x00,0x00,0x36,0x49,0x55,0x22,0x50,0x00},/*&*/
                               
{0x00,0x00,0x14,0x08,0x3e,0x08,0x14,0x00},/***/
                               
{0x00,0x00,0x00,0x1c,0x22,0x41,0x00,0x00},/*(*/
                               
{0x00,0x00,0x00,0x41,0x22,0x1c,0x00,0x00},/*)*/
                               
{0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x00},/*_*/
                               
{0x00,0x00,0x08,0x08,0x3e,0x08,0x08,0x00},/*+*/
                               
{0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00},/*|*/
                               
{0x00,0x00,0x00,0x7f,0x41,0x41,0x00,0x00},/*[*/
                               
{0x00,0x00,0x00,0x41,0x41,0x7f,0x00,0x00},/*]*/
                               
{0x00,0x00,0x00,0x56,0x36,0x00,0x00,0x00},/*;*/
                               
{0x00,0x00,0x00,0x00,0x05,0x03,0x00,0x00},/*'*/
                               
{0x00,0x00,0x00,0x00,0x28,0x18,0x00,0x00},/*,*/
                               
{0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00},/*.*/
                               
{0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00},/*//*/
                               
{0x00,0x00,0x00,0x08,0x36,0x41,0x00,0x00},/*{*/
                               
{0x00,0x00,0x00,0x41,0x36,0x08,0x00,0x00},/*}*/
                               
{0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00},/*:*/
                               
{0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00},/*"*/
                               
{0x00,0x00,0x08,0x14,0x22,0x41,0x00,0x00},/*<*/
                               
{0x00,0x00,0x00,0x41,0x22,0x14,0x08,0x00},/*>*/
                               
{0x00,0x00,0x02,0x01,0x51,0x09,0x06,0x00}/*?*/
                               };
/**********************************
  液晶驱动函数
***********************************/
void lcdlon_off(uchar D);
void setlstartx(uchar D);
void setlstarty(uchar D);
void setlstartline(uchar D);
void lcdron_off(uchar D);
void setrstartx(uchar D);
void setrstarty(uchar D);
void setrstartline(uchar D);
void lcdlwrite(uchar D);
void lcdrwrite(uchar D);
uchar GetIndex(uchar szText);
void writelcd(void);
void initial_lcd(void);
void clear_lcd(void);
void full_lcd(void);
//特有的函数
void write_char (uchar datan,uchar  hang,uchar  lie );
void write_str_noclear (uchar worddata[],uchar  hang,uchar  lie ,uchar  len);
void leddisp(void); //数码管显示函数
void readkey(void); //读键盘函数
void  delay(uint8 time_nop);
void interrup() interrupt 2 using 1
{a=1;}
void interrup2() interrupt 0 using 1
{g=1;}
void Display(void)//Gi
{
          uint8 i,x;
	      long shu=0;
	      if(xian>=10000000)
	      {shu=xian;x=0;}
		  else if(xian>=1000000)
          {shu=xian*10;x=1;}
		  else if(xian>=100000)
		  {shu=xian*100;x=2;}
		  else if(xian>=10000)
		  {shu=xian*1000;x=3;}
		  else if(xian>=1000)
		  {shu=xian*10000;x=4;}
		  else if(xian>=100)
		  {shu=xian*100000;x=5;}
		  else if(xian>=10)
		  {shu=xian*1000000;x=6;}
		  else if(xian>=0.001)
          {shu=xian*10000000;x=7;}
		  else if(xian>=0.0001)
		  {shu=xian*10000000;
		   for(i=0;i<=3;i++)
		   {  if(i==0)
		        led[3-i]=shu%10+18;
			  else
			    led[3-i]=shu%10;
			  shu=shu/10;
	        }led[7]=5;x=8;}
		  else if(xian>=0.00001)
		  {shu=xian*100000000;
		   for(i=0;i<=3;i++)
		   {  if(i==0)
		        led[3-i]=shu%10+18;
			  else
			    led[3-i]=shu%10;
			  shu=shu/10;
	        }led[7]=6;x=8;}
		 else if(xian>=0.000001)
		  {shu=xian*1000000000;
		   for(i=0;i<=3;i++)
		   {  if(i==0)
		        led[3-i]=shu%10+18;
			  else
			    led[3-i]=shu%10;
			  shu=shu/10;
	        }led[7]=7;x=8;}
		  if(x<=7)
          {for(i=0;i<=7;i++)
          {  
	        if(i!=x)
            led[i]=shu%10;
		    else
		    led[i]=shu%10+18;
            shu=shu/10;
          }}
		  if(x==8)
		  {led[4]=17;led[5]=17;led[6]=17;}

}
void gailcd(void)
{
  if(zz==1)
      write_str_noclear (zifu1,1,1,16);
  else if(zz==2)
      write_str_noclear (zifu2,1,1,16);
  else if(zz==3)
      write_str_noclear (zifu3,1,1,16);
  else if(zz==4)
      write_str_noclear (zifu4,1,1 ,16);
  else if(zz==5)
      write_str_noclear (zifu5,1,1,16);
  else
      { if(CHOICE==0)
        write_str_noclear (zifu6,3,1 ,16);
        else
        write_str_noclear (zifu7,3,1,16);
      }
  //write_str_noclear (zifu8,6,1,16);
}
/*void gaishu(void)
{
          uint8 i,x;
	      unsigned long shu1=0;
	      if(xian>=10000000)
	      {shu1=xian*100;x=2;}
		  else if(xian>=1000000)
          {shu1=xian*1000;x=3;}
		  else if(xian>=100000)
		  {shu1=xian*10000;x=4;}
		  else if(xian>=10000)
		  {shu1=xian*100000;x=5;}
		  else if(xian>=1000)
		  {shu1=xian*1000000;x=6;}
		  else if(xian>=100)
		  {shu1=xian*10000000;x=7;}
		  else if(xian>=10)
		  {shu1=xian*100000000;x=8;}
		  else
          {shu1=xian*1000000000;x=9;}
          for(i=0;i<=10;i++)
          {  
	        if(i!=x)
            {shu[10-i]=hehe[shu1%10];shu1=shu1/10;}
		    else
		    shu[10-i]=hehe[10];
          }
          write_str_noclear (shu,6,3,12);
}*/
void ReadAD(void)
{
   uint8 i;
   ADnum=0x0000;
   cs1=0;
   for(i=0;i<=9;i++)
   {
       clock=0;
       ADnum|=ioput;
	   if(i!=9)
       ADnum<<=1;
       clock=1;
   }
   cs1=1;
   clock=0;delay(30);
}

void cefu(void)
{
   float nm;
   ReadAD();
    if(ADnum>50)
       {nm=ADnum;xian=(nm*5)/1024;c=1;}

   /*uint8 pp,i;bit biao=0; float nm;  
   for(i=0;i<=99;i++)
   AD[i]=0;
   
   while(getkey==0)
   { DACOUT=0;
     do{}while(DACOUT<24);
     ReadAD();
     for(i=0;i<=98;i++)
     AD[i]=AD[i+1];
     AD[99]=ADnum;biao=0;
     for(pp=1;pp<=100;pp++)
        if((biao==0)&&(AD[100-pp]>50))
           {nm=AD[100-pp];xian=(nm*5)/1024;biao=1;jiyi=xian;}
     if(biao==0)  
       xian=jiyi;
   }*/ 
}    
void CLR1()
{
    CLR=0;
	delay(200);
	CLR=1;
	delay(200);
	CLR=0;
}
void intT0() interrupt 1 //T0 定时中断处理函数
{
	TH0 = -2720/256;  //定时器中断时间间隔 4ms
 	TL0 = -2720%256;
    shuacout++;//DACOUT++;
    coutcp++;gatecont++;
    if(shuacout>(shua*250))
       {if(c==1) Display(); shuacout=1;}
 	leddisp();  //每次定时中断显示更新一次
    
 	if(control_readkey == 1)  //每两次定时中断扫描一次键盘
   	{
    	readkey();
        if(getkey == 1)  //判断是否获得有效按键
  	    {   bbb=1;
     		getkey = 0;
  			switch(keynum) //判断键值,对不同键值采取相应的用户定义处理方式
       		{
				case 0x0f: 		 //当按下第二行最后一列按键时ceping
					zz=1;
					break;
				case 0x0e:  		////当按下第二行倒数第二列按键时zhouqi
				    zz=2;
			 		break;
				case 0x0d:		//当按下第二行倒数第三列按键时 maikuan
					zz=3;    
					break;
				case 0x0c:
					zz=4;    //当按下第二行倒数第四列按键时zhanong
					break;
				case 0x0b:
					zz=5;    //当按下第二行倒数第5列按键时,cefu
					break;
				case 0x0a:
					{jy=zz;zz=6; }   //当按下第二行倒数第6列按键时,
					break;
                case 0x09:
                    {shua++;if(shua==11) shua=1;
					if(shua==10)
					{write_char (hehe[1],5,14 ) ;write_char (hehe[0],5,15 ) ;}
					else
					write_char (hehe[shua],5,14 ) ;}
                    break;
                case 0x08:
                    {gate++;if(gate==11) gate=1;gatetime=gate*840;}
                    break;

⌨️ 快捷键说明

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