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

📄 方波发生器资料.txt

📁 51单片机P2口接4*4键盘的行线和列线;红灯亮时进行频率输入;绿灯亮时进行占空比输入;频率值暂定在100到60KHZ之间;输入频率和占空比时要输够六位整数
💻 TXT
字号:
/////51单片机P2口接4*4键盘的行线和列线;红灯亮时进行频率输入;绿灯亮时进行占空比输入;频率值暂定在100到60KHZ之间;输入频率和占空比时要输够六位整数,不够的在前面补0;占空比以百比数(0-100)形式存在。/////////// 
/////////方波发生器资料。空军工程大学导院501明明,2007.10.10初稿///////// 
#include<reg52.h> 
#include<stdio.h> 
#define uchar unsigned char 
sbit coma=P1^0; 
sbit comb=P1^1; 
sbit comc=P1^2; 
sbit comd=P1^3; 
sbit come=P1^4; 
sbit red=P1^5; 
sbit green=P1^6; 
sbit new=P1^7; 
sbit Q=P3^7; 
int i,x,y; 

/* 延时函数 */ 
void delay(void) 
{ 
uchar j; 
for (j=300;j>0;j--); 
} 

/*数字对应的共阳极段码*/ 
uchar getcode(uchar i) 
{ 
uchar p; 
switch (i) 
{ 
case 0: p=0xC0; break; /* 0 */ 
case 1: p=0xF9; break; /* 1 */ 
case 2: p=0xA4; break; /* 2 */ 
case 3: p=0xB0; break; /* 3 */ 
case 4: p=0x99; break; /* 4 */ 
case 5: p=0x92; break; /* 5 */ 
case 6: p=0x82; break; /* 6 */ 
case 7: p=0xF8; break; /* 7 */ 
case 8: p=0x80; break; /* 8 */ 
case 9: p=0x90; break; /* 9 */ 
default: break; 
} 
return(p); 
} 
/////////显示函数///////// 
void display(int t) 
{int a=t/10000,b=t/1000%10,c=t/100%10,d=t/10%10,e=t%10; 
P1=0x00; 
P0=getcode(a);coma=1;comb=0;delay(); 
P0=getcode(b);coma=0;comb=1;delay(); 
P0=getcode(c);comb=0;comc=1;delay(); 
P0=getcode(d);comc=0;comd=1;delay(); 
P0=getcode(e);comd=0;come=1;delay(); 
} 

/* 键扫描函数 */ 
uchar keyscan(void) 
{ 
uchar scancode,tmpcode; 
P2 = 0xf0; // 发全0行扫描码 
if ((P2&0xf0)!=0xf0) // 若有键按下 
{ 
delay(); // 延时去抖动 
if ((P2&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响 
{ 
scancode = 0xfe; 
while((scancode&0x10)!=0) // 逐行扫描 
{ 
P2 = scancode; // 输出行扫描码 
if ((P2&0xf0)!=0xf0) // 本行有键按下 
{ 
tmpcode = (P2&0xf0)|0x0f; 

/* 返回特征字节码,为1的位即对应于行和列 */ 
return((~scancode)+(~tmpcode)); 
} 
else scancode = (scancode<<1)|0x01; // 行扫描码左移一位 
} 
} 
} 
return(0); // 无键按下,返回值为0 
} 
/////////////T0中断///////// 
timer0 () interrupt 1 
{ 
Q=~Q; 
i=~i; 
if(i) 
{TL0=65536-(1000000/y*(1-x/100))%256; ////输出低电平状态计数器所需溢出次数/// 
TH0=65536-(1000000/y*(1-x/100))/256;} 

else 
{TL0=65536-(1000000/y*(x/100))%256; ////输出高电平状态计数器所需溢出次数/// 
TH0=65536-(1000000/y*(x/100))/256;} 
} 
///////////主函数/////////// 
main( ) 
{ 
int key,count,confirm; 
Q=1; 
TMOD=0x01; 
EA=1;ET0=1; 
while(1) 
{TR0=1;red=1; 
while(confirm<2) 
{ 
key = keyscan(); // 调用键盘扫描函数 
switch(key) 
{case 0x11: if (count<=5) {x=10*x;count++;} break; // 1行1列,数字0 
case 0x21: if (count<=5) {x=10*x+1;count++;} break;// 1行2列,数字1 
case 0x41: if (count<=5) {x=10*x+2;count++;} break;// 1行3列,数字2 
case 0x81: if (count<=5) {x=10*x+3;count++;} break;// 1行4列,数字3 
case 0x12: if (count<=5) {x=10*x+4;count++;} break;// 2行1列,数字4 
case 0x22: if (count<=5) {x=10*x+5;count++;}break; // 2行2列,数字5 
case 0x42: if (count<=5) {x=10*x+6;count++;} break;// 2行3列,数字6 
case 0x82: if (count<=5) {x=10*x+7;count++;} break;// 2行4列,数字7 
case 0x14: if (count<=5) {x=10*x+8;count++;} break;// 3行1列,数字8 
case 0x24: if (count<=5) {x=10*x+9;count++;} break;// 3行2列,数字9 
case 0x44: if (count==5) {if(confirm==0) 
{y=x;x=0;count=0;red=0;green=1;}confirm++;} break;// 3行3列,确认键 
//输入完频率,按下确认键,再输入占空比 
case 0x84: x=0;count=0; break; // 3行4列,取消键 
default: break; 
} 
display(x); 
} 
TR0=1; 
if(new==0) 
{ delay();if(new==0){confirm=0;y=0;x=0;count=0;} } 
}}

⌨️ 快捷键说明

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