哪位大神有种子能帮我看看怎么回事━┳━ ━┳━

查看: 53|回复: 2
无法实现正弦波频率的调节,哪位大神帮忙看看怎么回事,感激万分
#include&reg52.h&
#include&12864.h&
#include&da7621.h&
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
unsigned char a,b,c,j=3;
void main()
{&&& & & &
& & & & P0=0
& & & & P2=0
& & & & TMOD=0x01;& & & & & & & &&&//设定定时器0为方式1
& & & & EA=1;& & & & & & & & & & & && & //开总中断
& & & & EX0=1;& & & & & & & & & & & && &
& & & & EX1=1;& & & & & & & & & & & & & & & & //打开外部中断允许为位
& & & & IT0=0;& & & & & & & & & & & & & & & &&&//关闭t0定时器中断允许位
& & & & IT1=0;
& & & & & & & & & & & && &//延时
& & & & lcd_init();& & & & & & & & & & & & & & & & //初始化12864液晶
& & & & lcd_display();
& & & & ms=500;
& & & & fro=
//& & & & while(!flag);& && &&&//等待按键处理
//& & & & flag=0;
& & & & TH0=(/fro)/256; //10^6*(1/fro)/(12/7431/fro
& & & & TL0=(/fro)%256;
& & & & TR0=1;
& & & & while(1)
& & & & {
& & & && & write_f(ms);
& & & && & key();
& & & & }
}
void INT0_key() interrupt 0//键盘扫描
{
& & & & uchar a,b,c;
& & & & for(c=40;c&0;c--)
& & & & & & & & for(b=50;b&0;b--)
& & & & & & & & & & & & for(a=250;a&0;a--)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & key();
& & & & & & & & & & & & & & & & }
}
void INT1_exit_sin() interrupt 2 //退出正弦波输出死循环
{
& & & &
& & & & exit=1;
} & & & &&&
#define uchar unsigned char
#define uint unsigned int
//端口定义
#define LCD_data P0& & & && & //数据口
sbit LCD_RS = P1^5;& & & & & & & & & & & & //寄存器选择输入
sbit LCD_RW = P1^6;& & & & & & & && & //液晶读写/写控制
sbit LCD_EN = P1^7;& & & & & & & && & //液晶使能控制
sbit LCD_PSB= P1^4;& & & & & & & & & & & & //串/并方式控制
uchar code dis1[]={&频率:&};
uchar code dis2[]={&Hz&};
void delayms(uint xms)
{
& & & & uint i,j;
& & & & for(i=i&0;i--)
& & & & & & & & for(j=110;j&0;j--);
}
//写指令数据到LCD
//RS=L,RW=L,E=高脉冲,D0-D7=指令码
void write_cmd(uchar cmd)
{
& & & & LCD_RS=0;
& & & & LCD_RW=0;
& & & & LCD_EN=0;
& & & & P0=
& & & & delayms(5);
& & & & LCD_EN=1;
& & & & delayms(5);
& & & & LCD_EN=0;
}
//写显示数据到LCD
//RS=H,RW=L,E=高脉冲,D0-D7=数据
void write_dat(uchar dat)
{
& & & & LCD_RS=1;
& & & & LCD_RW=0;
& & & & LCD_EN=0;
& & & & P0=
& & & & delayms(5);
& & & & LCD_EN=1;
& & & & delayms(5);
& & & & LCD_EN=0;
}
//设定显示位置
void lcd_pos(uchar X,uchar Y)
{
& & & &
& & & & if(X==0)
& & & & & & & & {X=0x80;}
& & & & else if(X==1)
& & & & & & & & {X=0x90;}
& & & & else if(X==2)
& & & & & & & & {X=0x88;}
& & & & else if(X==3)
& & & & & & & & {X=0x98;}
& & & & pos=X+Y;
& & & & write_cmd(pos);&&//显示地址
}
void lcd_display()
{
& & & &
& & & & lcd_pos(0,0);& & & & & & & & & & & & & & & & //设置显示位置为第二行的第一个字符
& & & & i=0;
& & & & while(dis1[i]!='\0')
& & & & {
& & & & & & & & write_dat(dis1[i]);& & & & & & & && &//显示字符
& & & & & & & & i++;
& & & & }
& & & & lcd_pos(0,6);& & & & & & & & & & & & & & & && &//设置显示位置为第三行的第一个字符
& & & & i=0;
& & & & while(dis2[i]!='\0')
& & & & {
& & & & & & & & write_dat(dis2[i]);& & & && & //显示字符
& & & & & & & & i++;
& & & & }
}
//LCD初始化设定
void lcd_init()
{
& & & & LCD_PSB=1;& & & & & & & & & & & & & & & &&&//并口方式
& & & & write_cmd(0x30);& & & & & & & &&&//基本指令操作
& & & & delayms(5);
& & & & write_cmd(0x0c);& & & & & & & && &//显示开,关光标
& & & & delayms(5);
& & & & write_cmd(0x01);& & & & & & & & & & & & //清除LCD的显示内容
& & & & delayms(5);
}
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit key1=P3^7;
sbit key2=P3^6;
sbit key3=P3^5;
unsigned char code tab[]={
0x800,0x86B,0x8D6,0x940,0x9AA,0xA12,0xA79,0xADE,0xB41,0xBA1,
0xC00,0xC5B,0xCB3,0xD08,0xD5A,0xDA7,0xDF1,0xE37,0xE78,0xEB5,
0xEED,0xF20,0xF4E,0xF77,0xF9B,0xFB9,0xFD2,0xFE6,0xFF4,0xFFC,
0xFFF,0xFFC,0xFF4,0xFE6,0xFD2,0xFB9,0xF9B,0xF77,0xF4E,0xF20,
0xEED,0xEB5,0xE78,0xE37,0xDF1,0xDA7,0xD5A,0xD08,0xCB3,0xC5B,
0xC00,0xBA1,0xB41,0xADE,0xA79,0xA12,0x9AA,0x940,0x8D6,0x86B,
0x800,0x795,0x72A,0x6C0,0x656,0x5EE,0x587,0x522,0x4BF,0x45F,
0x400,0x3A5,0x34D,0x2F8,0x2A6,0x259,0x20F,0x1C9,0x188,0x14B,
0x113,0xE0,0xB2,0x89,0x65,0x47,0x2E,0x1A,0x0C,0x04,
0x01,0x04,0x0C,0x1A,0x2E,0x47,0x65,0x89,0xB2,0xE0,
0x113,0x14B,0x188,0x1C9,0x20F,0x259,0x2A6,0x2F8,0x34D,0x3A5,
0x400,0x45F,0x4BF,0x522,0x587,0x5EE,0x656,0x6C0,0x72A,0x795};
unsigned char exit=0;
void write_f(int ms)
{& & & &&&
& & & & lcd_pos(0,3);&&
& & & & write_dat(0x30+ms/1000);
//& & & & write_dat('.');& & & & & & & && && && &&&//小数点显示& & & &
& & & & write_dat(0x30+ms/100%10);& & & &
& & & & write_dat(0x30+ms/10%10);
& & & & write_dat(0x30+ms%10);
}
void key()
{
& & & & if(key1==0)
& & & & {
& & & & & & & & delayms(5);
& & & & & & & & if(key1==0)
& & & & & & & & {
& & & & & & & & & & & & ms=ms+50;
& & & & & & & & & & & & if(ms&1000)
& & & & & & & & & & & & & & & & ms=50;
& & & & & & & & & & & & while(!key1);
& & & & & & & & }
& & & & }
& & & & if(key2==0)
& & & & {
& & & & & & & & delayms(5);
& & & & & & & & if(key2==0)
& & & & & & & & {& & & & & & & &
& & & & & & & & & & & & ms=ms-50;
& & & & & & & & & & & & if(ms&100)
& & & & & & & & & & & & & & & & ms=1000;
& & & & & & & & & & & & while(!key2);
& & & & & & & & }
& & & & }
& & & & if(key3==0)
& & & & {
& & & & & & & & delayms(5);
& & & & & & & & if(key3==0)
& & & & & & & & {
& & & & & & & & & & & & ms=500;
& & & & & & & & & & & & while(!key3);
& & & & & & & & }
& & & & }
}
void write_sin()//输出正弦波循环
{&&
& & & & if(TF0==1)
& & & & {
& & & & & & & & TH0=(/fro)/256;
& & & & & & & & TL0=(/fro)%256;
& & & & & & & & TF0=0;
& & & & & & & & for(i=0;i&120;i++)
& & & & & & & & {
& & & & & & & & & & & & P2=tab[i]&0
& & & & & & & & & & & & P1=tab[i]&&8;
& & & & & & & & }
& & & & & & & & i++;
& & & & & & & & if(i&119)
& & & & & & & & {
& & & & & & & & & & & & i=0;
& & & & & & & & }
& & & & }
& & & & if(exit==1)
& & & & {
& & & & & & & & exit=0;
& & & & & & & & TR0=0;
& & & & //& & & &
& & & & }
}
 你的 fro 在初始化以后就没有被重新赋值国 你需要在按键处理的时候 加上一句 fro = ms; 或者在主函数的while(1)循环里面加一句 fro =
 xueyunmicheng 发表于
你的 fro 在初始化以后就没有被重新赋值国 你需要在按键处理的时候 加上一句 fro = ms; 或者在主函数的whi ...
加了也没起什么作用!我的程序好像无法实现输出正弦波,请问你有做过类似的吗?
Powered by百度拇指医生
&&&普通咨询
您的网络环境存在异常,
请输入验证码
验证码输入错误,请重新输入}

我要回帖

更多关于 哪位大神有种子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信