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

📄 gfhghky.txt

📁 本人写的课程设计程序 程序功能: 1.m序列的产生 2.游程的计算 3.人机互动的实现
💻 TXT
字号:
/************************* 
程序功能: 
1.m序列的产生 
2.游程的计算 
3.人机互动的实现 
**************************/ 
#include <reg52.h> 
#include<absacc.h> 
#include<stdio.h> 
#define uc unsigned char 
void count0(); 
void count1(); 
uc y; 
uc q; 
uc bu; 
uc bu1; 
unsigned char code s[]= 
{
0x3F,/*0*/ 
0x06,/*1*/ 
0x5B,/*2*/ 
0x4F,/*3*/ 
0x66,/*4*/ 
0x6D,/*5*/ 
0x7D,/*6*/ 
0x07,/*7*/ 
0x7F,/*8*/ 
0x6F,/*9*/ 
0x77,/*A*/ 
0x7C,/*b*/ 
0x39,/*C*/ 
0x5E,/*d*/ 
0x79,/*E*/ 
0x71,/*F*/ 
};//字型码组void delay() //延时 
void delay() //延时 
{ 
uc j; 
uc k; 
for(j=10;j--;j>0) 
for(k=248;k--;k>0); 
} 
void delay0() //延时 
{ 
uc j; 
uc k; 
for(j=200;j--;j>0) 
for(k=200;k--;k>0); 
} 
void delay10() //延时 
{ uc i; 
uc j; 
uc k; 
for(i=1;i--;i>0) 
for(j=2;j--;j>0) 
for(k=24;k--;k>0); 
} 
first() 
{ 
uc cu; 
cu=100; 
for(q=0;q<100;q++) 
{ 
cu--; 
P0=s[cu%10]; 
P2=0x01; 
delay(); 
P0=s[cu/10]; 
P2=0x02; 
delay(); 
if(cu==0) 
{ 
cu=100; 
} 
P0=s[cu%10]; 
P2=0x01; 
delay(); 
P0=s[cu/10]; 
P2=0x02; 
delay(); 
} 
P0=s[45]; 
P2=0xff; 
delay0(); 
delay0(); 
} 
uc buf[]={0,0,0,0};//4通道数据待存数组 
uc c[]={0x01,0x02,0x04,0x08};//数码管位选数组 
uc temp; 
uc l; 
uc i; 
uc q; 
uc r; 
uc bu; 
uc bu1; 
bit p; 
sbit x0=IP^0; 
sbit x1=IP^1; 
sbit x2=IP^2; 
sbit x3=IP^3; 
sbit K1=P3^5; 
sbit K2=P3^6; 
sbit K3=P3^7; 
main() 
{
TMOD=0x20;// 波特率发生器T1工作在模式2上 
TH1=0xf3;// 预置初值(按照波特率2400BPS预置初值) 
TL1=0xf3;// 预置初值(按照波特率2400BPS预置初值) 
TR1=1;// 启动定时器T1 
SCON=0x50; //设置成串口1方式 
PCON=0x80; //波特率翻倍2*2400=4800bps 
first(); 
while(1) 
{ 
if(K1==1) 
{ 
IP=P1&0x0f; 
} 
else 
{ 
IP=SBUF; 
delay10(); 
if(RI) 
{ 
RI=0; 
} 
} //K1决定选择寄存器数值的输入方式,电脑键盘或是拨码开关 
for(l=16;l>2;l--) 
{ 
p=x0^x1; 
temp=IP&0x0f; 
if(temp==0) 
{
K3=0; 
}
else 
{
K3=1; 
}
if(l%4==0)//寄存器每移位四位则处理 
{ 
buf[(l/4)-1]=temp; 
if(l/4==1) 
{ 
buf[0]=buf[0]&0x07; 
}
P0=s[buf[(l/4)-1]]; 
P2=c[4-l/4]; //将计算出的数值在数码管上显示 
SBUF=temp; //将计算出的数值送电脑串口并在屏幕上显示 
for(i=0;i<15;i++) 
{
delay10(); 
}
if(!TI) 
{ 
TI=0; 
} 
} 
IP=IP>>1; 
x3=p; 
} 
/*************************** 
K2若按下,循环显示游程值 
***************************/ 
loop: 
if(K2==0)//判断按键是否被按下 
{ 
delay10(); 
if(K2==0) //再次判断判断按键是否真被按下 
count0();//调用函数,计算并显示0的游程数 
l=r; 
delay10(); 
count1();//调用函数,计算并显示1的游程数 
delay10(); 
l=l+r; 
l=l&0x0f; 
P0=s[l]; 
P2=0x01;//显示总游程数目 
delay10(); 
goto loop; 
} 
} 
}
/********************************** 
函数名称:count0 
作用:计算M序列中0的游程总数 
***********************************/ 
void count0(void) 
{
uc k; 
k=0; 
r=0;//游程初始化 
bu=0x00; 
bu=buf[2]<<4;////buf[2]左移四位赋予bu 
bu=bu&0xf0;//高四位清0 
bu=bu|buf[3];//buf[2]与buf[3]构成一个8位的bu 
for(i=16;i>2;i--) 
{ 
if(i<15&&i>7) 
{ 
/********************************************* 
bu右移满4位后,高4位重新装入须计算的buf值 
*********************************************/ 
if(i%4==0) 
{ 
uc s; 
bu=bu&0x0f; 
s=i/4; 
bu1=buf[s-2]<<4; 
bu1=bu1&0xf0; 
bu=bu|bu1; 
} 
} 
q=bu&0x03;//判断bu最后两位是否全为0 
bu=bu>>1; 
//右移一位 
if(q==0) //为0则处理 
{ 
r++; //游程累加 
if(k==i) 
{ 
r--; 
}//判断是否连0状态,若是则游程不需累加 
k=i-1; 
} 
} 
P0=s[r]; 
P2=0x08; 
} 
/***************************************** 
函数名称:count1 
作用:计算M序列中1的游程总数 
******************************************/ 
void count1(void) 
{
uc k; 
k=0; 
r=0; 
bu=0x00; 
bu=buf[2]<<4; 
bu=bu&0xf0; 
bu=bu|buf[3]; 
for(i=16;i>1;i--) 
{ 
if(i<15&&i>7) 

{ 
if(i%4==0) 
{ 
uc s; 
bu=bu&0x0f; 
s=i/4; 
bu1=buf[s-2]<<4; 
bu1=bu1&0xf0; 
bu=bu|bu1; 
} 
} 
q=bu&0x03; 
bu=bu>>1; 
if(q==0x03) //判断bu最后两位是否全为1 
{ 
r++; 
if(k==i) 
{ 
r--; 
} 
k=i-1; 
} 
}
P0=s[r]; 
P2=0x04; 
}



//////////////////////////////////////////////////////
//////////////////////////////////////////////////////



/************************* 
程序功能: 
1.M序列的产生 
2.游程的计算 
3.人机互动的实现 
4.移位寄存器的状态显示 
**************************/ 
#include <reg52.h> 
#include<absacc.h> 
#include<stdio.h> 
#define uc unsigned char 
void count0(); 

void count1(); 
uc y; 
uc bu; 
uc bu1; 
unsigned char code s[]= 
{
0x3F,/*0*/ 
0x06,/*1*/ 
0x5B,/*2*/ 
0x4F,/*3*/ 
0x66,/*4*/ 
0x6D,/*5*/ 
0x7D,/*6*/ 
0x07,/*7*/ 
0x7F,/*8*/ 
0x6F,/*9*/ 
0x77,/*A*/ 
0x7C,/*b*/ 
0x39,/*C*/ 
0x5E,/*d*/ 
0x79,/*E*/ 
0x71,/*F*/ 
};//字型码组
void delay() //延时 
{ 
uc j; 
uc k; 
for(j=5;j--;j>0) 
for(k=200;k--;k>0); 
} 
void delay1() //延时 
{ 
uc j; 
uc k; 
for(j=200;j--;j>0) 
for(k=248;k--;k>0); 
} 
void delay10() //延时 
{ uc i; 
uc j; 
uc k; 
for(i=1;i--;i>0) 
for(j=20;j--;j>0) 
for(k=24;k--;k>0); 
} 
FIRST() 
{
uc cu; 
uc q; 
cu=100; 
for(q=0;q<100;q++) 
{ 
cu--; 
P0=s[cu%10]; 
P2=0x01; 
delay(); 
P0=s[cu/10]; 
P2=0x02; 
delay(); 
if(cu==0) 
{ 
cu=100; 
} 
P0=s[cu%10]; 
P2=0x01; 
delay(); 
P0=s[cu/10]; 
P2=0x02; 
delay(); 
} 
P0=s[45]; 
P2=0xff; 
delay1(); 
} 
uc buf[]={0,0,0,0};//4通道数据待存数组 
uc buf1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//16通道数据待存数组 
uc c[]={0x01,0x02,0x04,0x08};//数码管位选数组 
uc temp; 
uc temp1; 
uc l; 
uc i; 
uc q; 
uc r; 
uc bu; 
uc bu1; 
bit p; 
sbit x0=IP^0; 
sbit x1=IP^1; 
sbit x2=IP^2; 
sbit x3=IP^3; 
sbit K1=P3^5; 
sbit K2=P3^6; 
sbit K3=P3^7; 
main() 
{ 
r=16; 
TMOD=0x20;// 波特率发生器T1工作在模式2上 
TH1=0xf3;// 预置初值(按照波特率2400BPS预置初值) 
TL1=0xf3;// 预置初值(按照波特率2400BPS预置初值) 
TR1=1;// 启动定时器T1 
SCON=0x50; //设置成串口1方式 
PCON=0x80; //波特率翻倍2*2400=4800bps 
FIRST(); 
while(1) 
{ 
if(K1==1) 
{ 
IP=P1&0x0f; 
} 
else 
{ 
IP=SBUF; 
if(RI) 
{ 
RI=0; 
} 
} //K1决定选择寄存器数值的输入方式,电脑键盘或是拨码开关 
for(l=16;l>0;l--) 
{ 
p=x0^x1; 
temp=IP&0x0f; 
buf1[l-1]=temp; 
if(x1==0&&x2==0&&x3==0) 
{ 
p=~p; 
}// x1,x2,x3全为0时,x0,x1异或值取反 
if(l%4==0)//寄存器每移位四位则处理 
{ 
buf[(l/4)-1]=temp; 
P0=s[temp]; 
P2=c[4-l/4]; //将计算出的数值在数码管上显示 
SBUF=temp; //将计算出的数值送电脑串口并在屏幕上显示 
if(!TI) 
{ 
TI=0; 
} 
delay10(); 
} 
IP=IP>>1; 
x3=p; 
} 
/*************************** 
4位移位寄存器状态显示 
***************************/ 
show4: 
if(K3==0)//判断按键是否被按下 
{ 
if(temp1!=buf[0]) 
{ 
r=16; 
} 
if(r==0) 
{ 
r=16; 
} 
P0=s[(16-r)%10]; 
P2=0x02; 
delay10(); 
if(r<7) 
{
P0=s[(16-r)/10]; 
P2=0x04; 
delay10(); 
} 
P0=s[buf1[r-1]]; 
P2=0x01; 
delay10(); 
if(K3==1) 
{ 
r--; 
} 
temp1=buf[0]; 
goto show4; 
}
/*************************** 
K2若按下,循环显示游程值 
***************************/ 
show: 
if(K2==0)//判断按键是否被按下 
{ 
delay10(); 
if(K2==0) //再次判断判断按键是否真被按下 
count0();//调用函数,计算并显示0的游程数 
delay10(); 
l=r; 
count1();//调用函数,计算并显示1的游程数 
delay10(); 
l=l+r; 
l=l&0x0f; 
P0=s[l]; 
P2=0x01;//显示总游程数目 
delay10(); 
goto show; 
} 
} 
}
/********************************** 
函数名称:count0 
作用:计算M序列中0的游程总数 
***********************************/ 
void count0(void) 
{
uc k; 
k=0; 
r=0;//游程数值初始化 
bu=0x00; 
bu=buf[2]<<4;////buf[2]左移四位赋予bu 
bu=bu&0xf0;//高四位清0 
bu=bu|buf[3];//buf[2]与buf[3]构成一个8位的bu 
for(i=16;i>1;i--) 
{ 
if(i<15&&i>7) 
{ 
/********************************************* 
bu右移满4位后,高4位重新装入须计算的buf值 
**********************************************/ 
if(i%4==0) 
{ 
uc s; 
bu=bu&0x0f; 
s=i/4; 
bu1=buf[s-2]<<4; 
bu1=bu1&0xf0; 
bu=bu|bu1; 
} 
} 
q=bu&0x03;//判断bu最后两位是否全为0 
bu=bu>>1; //右移一位 
if(q==0) //为0则处理 
{ 
r++; //游程累加 
if(k==i) 
{ 
r--; 
}//判断是否连0状态,若是则游程不需累加 
k=i-1; 
} 
} 
P0=s[r]; 
P2=0x08; 
} 
/***************************************** 
函数名称:count1 
作用:计算M序列中1的游程总数 
******************************************/ 
void count1(void) 
{
uc k; 
k=0; 
r=0; 
bu=0x00; 
bu=buf[2]<<4; 
bu=bu&0xf0; 
bu=bu|buf[3]; 
for(i=16;i>1;i--) 
{ 
if(i<15&&i>7) 
{ 
if(i%4==0) 
{ 
uc s; 
bu=bu&0x0f; 
s=i/4; 
bu1=buf[s-2]<<4; 
bu1=bu1&0xf0; 
bu=bu|bu1; 
} 
} 
q=bu&0x03; 
bu=bu>>1; 
if(q==0x03) //判断bu最后两位是否全为1 
{ 
r++; 
if(k==i) 
{ 
r--; 
} 
k=i-1; 
} 
}
P0=s[r]; 
P2=0x04; 
} 

⌨️ 快捷键说明

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