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

📄 12.txt

📁 采用C语言来编辑分频 测控 计数和储存。和硬件相匹配
💻 TXT
字号:
7.1 程序清单

/************<B>头文件声明</B>***********************/
#include&lt;absacc.h&gt; 
#include&lt;reg52.h&gt;
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/******************<B>液晶使能信号输入端及寄存器选择操作预定义</B>******************/
#define LCD_RS T0
#define LCD_E INT0
/***************<B>可位寻址特殊功能寄存器名定义</B>******************/
sbit P2_0=P2^0; 
sbit P2_1=P2^1;
sbit ACC0=ACC^0;
sbit ACC1=ACC^1;
sbit ACC2=ACC^2;
sbit ACC3=ACC^3;
sbit ACC4=ACC^4;
sbit ACC5=ACC^5;
sbit ACC6=ACC^6;
sbit ACC7=ACC^7;
/*************** <B>位及变量定义</B>*****************/
bit temp,key1_save,key2_save,key3_save,key4_save,keyon,keyoff;
uchar state,cursor_shift;
uchar cursor[5]={0,9,3,0,0};
uint t0count;
uint A_data,N_data;
uchar data_com,data_show;
uchar dat1,dat2,dat3,dat4,dat5;
uchar order[4]={0x38,0x01,0x06,0x0C};
uchar code data1[22]={0x4e,0x61,0x6e,0x68,0x75,0x61,0x55,0x6e,0x69,0x76,0x65,
 0x72,0x73,0x69,0x74,0x79,0x53,0x65,0x74,0x46,0x4d,0x3a};
uchar code data2[22]={0x4e,0x61,0x6e,0x68,0x75,0x61,0x55,0x6e,0x69,0x76,0x65,
 0x72,0x73,0x69,0x74,0x79,0x52,0x75,0x6e,0x46,0x4d,0x3a};
uchar i=0;
ulong FMdata,count_fm,temp1,FM_temp;
ulong k;
/****************<B>函数声明</B>******************/
get_A_N_data(long FMdata);
lcd_set_display(dat1,dat2,dat3,dat4,dat5,cursor_shift);
lcd_run_display(dat1,dat2,dat3,dat4,dat5);
/****************<B>延时子程序</B>*****************/
void delay(uint v)
{while(v!=0)v--;}
/****************<B>读键盘子程序</B>*********************/
read_key()
{keyon=0;
if(WR==0)
{key1_save=1;keyon=1;}
if(RD==0)
{key2_save=1;keyon=1;}
if(P2_1==0)
{key3_save=1;keyon=1;}
if(P2_0==0)
{key4_save=1;keyon=1;}
if(keyon==1)
{keyoff=1;}}
/***************<B>键盘处理子程序</B>***************/
key_process()
{while(keyoff)
{delay(100);
read_key();
if(keyon==0)
{keyoff=0;
if(key1_save==1)
{state=state+1;
if(state&gt;=2) {state=0;}
key1_save=0;}
if(key2_save==1&amp;&amp;state==0)
{cursor_shift=cursor_shift+1;
if(cursor_shift&gt;=12) {cursor_shift=6;}
key2_save=0;}
if(key3_save==1&amp;&amp;state==0)
{switch(cursor_shift)
 {case 6:
 cursor[0]=cursor[0]+1;
 if(cursor[0]==2) cursor[0]=0;
  break;
  case 7:
 cursor[1]=cursor[1]+1;
 if(cursor[1]==10) cursor[1]=0;
  break;
  case 8:
 cursor[2]=cursor[2]+1;
 if(cursor[2]==10) cursor[2]=0;
  break;
  case 10:
 cursor[3]=cursor[3]+1;
 if(cursor[3]==10) cursor[3]=0;
  break;
  case 11:
 cursor[4]=cursor[4]+1;
 if(cursor[4]==10) cursor[4]=0;
  break;}
key3_save=0;}
if(key4_save==1&amp;&amp;state==0)
{switch(cursor_shift)
 { case 6:
 if(cursor[0]&gt;0)
 {cursor[0]=cursor[0]-1;}
 else cursor[0]=1;
  break;
  case 7:
 if(cursor[1]&gt;0)
 {cursor[1]=cursor[1]-1;}
 else cursor[1]=9;
  break;
  case 8:
 if(cursor[2]&gt;0)
 {cursor[2]=cursor[2]-1;}
 else cursor[2]=9;
  break;
  case 10:
 if(cursor[3]&gt;0)
{cursor[3]=cursor[3]-1;}
 else cursor[3]=9;
  break;
  case 11:
 if(cursor[4]&gt;0)
 {cursor[4]=cursor[4]-1;}
 else cursor[4]=9;
  break; }
key4_save=0;}
if(state==0)
{lcd_set_display(cursor[0],cursor[1],cursor[2],cursor[3],cursor[4],cursor_shift);}} 
FMdata=cursor[0]*10000+cursor[1]*1000+cursor[2]*100+cursor[3]*10+cursor[4]+2;}}
/***************<B>A</B><B>、N输出数据生成及输出程序</B>********************/
get_A_N_data(long FMdata)
{ N_data=FMdata/64;
A_data=FMdata%64;
ACC=N_data;
P0=ACC;
ACC=0;
ACC=A_data;
temp=ACC7;
ACC7=ACC0;
ACC0=temp;
temp=ACC6;
ACC6=ACC1;
ACC1=temp;
temp=ACC5;
ACC5=ACC2;
ACC2=temp;
temp=ACC4;
ACC4=ACC3;
ACC3=temp;
P2=ACC;
P2_1=1;
P2_0=1;}
/**************<B>液晶写指令程序</B>*****************/
write_com(uchar data_com)
{LCD_RS=0;
LCD_E=1;
P1=data_com;
delay(500);
LCD_E=0;}
/**************<B>液晶写数据程序</B>****************/
write_data(uchar data_show)
{LCD_RS=1;
LCD_E=1;
P1=data_show;
delay(500);
LCD_E=0;}
/***************<B>液晶初始化程序</B>*****************/
initial_lcd(void)
{write_com(order[0]);
write_com(order[1]);
write_com(order[2]);
write_com(order[3]);}
/***************<B>频率设置状态下液晶显示程序</B>*************/
lcd_set_display(dat1,dat2,dat3,dat4,dat5,cursor_shift)
(0x0D);
 write_com(0x80);
 for(i=0;i&lt;16;i++)
 write_data(data1[i]);
 write_com(0xc0);
 for(i=16;i&lt;22;i++)
 write_data(data1[i]);
 write_data(dat1+0x30);
 write_data(dat2+0x30);
 write_data(dat3+0x30);
 write_data(0x2E);
 write_data(dat4+0x30);
 write_data(dat5+0x30);
 write_data(0x4D);
 write_data(0x48);
 write_data(0x7A); 
 write_com(0xC0+cursor_shift);}
/****************<B>运行状态下频率显示程序</B>***************/
lcd_run_display(dat1,dat2,dat3,dat4,dat5)
{ write_com(0x80);
 for(i=0;i&lt;16;i++)
 write_data(data2[i]);
 write_com(0xc0);
 for(i=16;i&lt;22;i++)
 write_data(data2[i]);
 write_data(dat1+0x30);
 write_data(dat2+0x30);
 write_data(dat3+0x30);
 write_data(0x2E);
 write_data(dat4+0x30);
 write_data(dat5+0x30);
 write_data(0x4D);
 write_data(0x48);
 write_data(0x7A); }
/*************************<B>主函数</B>****************************/
main()
{delay(2560); 
TMOD=0x51;
TH0=0x4b; /* 定时器初值预置 */
TL0=0xff;
SCON=0x70;
TH1=0;
TL1=0;
t0count=0;
EA=1;
ET0=1;
TR0=1;
PT0=1;
ET1=1;
TR1=1;
 initial_lcd();
 FMdata=9302;
 FM_temp=9302;
 key1_save=0;
 key2_save=0;
 key3_save=0;
 key4_save=0;
 dat1=0x30+1;
 dat2=0x30;
 dat3=0x30+5;
 dat4=0x30+3;
 dat5=0x30+2;
 keyon=0;
 cursor_shift=6;
 state=1;
 get_A_N_data(FMdata);
 k=416*N_data;
 k=k/(65*N_data-A_data);
while(1)
{P2_0=1;
P2_1=1;
RD=1;
WR=1;
read_key();
key_process();
temp1=count_fm/2;
temp1=temp1*k;
temp1=temp1/10;
temp1=temp1-2;
dat1=temp1/10000;
temp1=temp1%10000;
dat2=temp1/1000;
temp1=temp1%1000;
dat3=temp1/100;
temp1=temp1%100;
dat4=temp1/10;
temp1=temp1%10;
dat5=temp1/1;
if(state==1)
{lcd_run_display(dat1,dat2,dat3,dat4,dat5);
if(FMdata!=FM_temp)
 { while((FMdata-FM_temp&gt;15))
 { FM_temp=FM_temp+15;
get_A_N_data(FM_temp);
delay(10000); }
 while((FM_temp-FMdata&gt;6))
 { FM_temp=FM_temp-6;
get_A_N_data(FM_temp);
delay(10000); }
 FM_temp=FMdata;
 get_A_N_data(FM_temp);
 k=416*N_data;
 k=k/(65*N_data-A_data);} } } }
/*****************<B>定时器0</B><B>中断</B>*********************/
time0() interrupt 1 using 1
{ TH0=0x4b;
TL0=0xff;
t0count=t0count+1;
if(t0count==40) 
 {count_fm=TH1*256;
 count_fm=count_fm+TL1;
 TH1=0x0;
 TL1=0x0;
 t0count=0;} }
time1() interrupt 3 using 2
{TH1=0x0;
TL1=0x0;}

⌨️ 快捷键说明

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