久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索

如何通過(guò)單片機(jī)串口改變頻率?

查看數(shù): 4118 | 評(píng)論數(shù): 6 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁(yè)<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2021-6-2 19:21

正文摘要:

怎么實(shí)現(xiàn)題目的第四個(gè)功能,前三個(gè)已經(jīng)實(shí)現(xiàn)了,有沒有大佬會(huì),再原有的基礎(chǔ)上實(shí)現(xiàn)第四個(gè)功能或者不用那么全,只是能通過(guò)串口發(fā)送一個(gè)字母然后改變一下頻率也行,實(shí)在是不會(huì)了 單片機(jī)源程序如下: #include< ...

回復(fù)

ID:593706 發(fā)表于 2021-6-16 18:01
給你說(shuō)一個(gè)思路,程序你自己寫。通過(guò)上位機(jī)串口發(fā)送一串十六進(jìn)的數(shù)字,單片機(jī)串口收到這個(gè)數(shù)字后,用接收到的數(shù)字給單片機(jī)的頻率發(fā)生定時(shí)器賦值,用賦值改變定時(shí)器的初值,就可能實(shí)現(xiàn)串口調(diào)節(jié)頻率。
      例如串口收到6,就給定時(shí)器的初值減1、串口收到8,就給定時(shí)器的初值加1,從而實(shí)現(xiàn)頻率的升或降。
ID:157057 發(fā)表于 2021-6-16 09:12
不懂得再問(wèn)
ID:157057 發(fā)表于 2021-6-16 09:12
#include <reg52.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
#define DA_DATA  P1    //DAC0832數(shù)據(jù)口
#define AMP_DEFAULT      5.0f    //默認(rèn)幅值  單位:V
#define AMP_MAX          12.0f   //最大幅值為12
#define AMP_MIN          0.0f    //最小幅值
#define T                1000     //計(jì)時(shí)周期  單位:us
#define CYCLE_DEFAULT    1000    //默認(rèn)正弦周期   單位:us
#define CYCLE_MAX        20000    //最大周期
#define CYCLE_MIN                 1000
#define PI               3.1415926f

/****************************變量*******************************/
uint Angle = 0;   //角度  0-360
int time = 0;            //計(jì)時(shí)
int cycle_T = 0;    //正弦周期
float Amp = 0.0f;

//定義DAC0832接口
sbit DA_WR = P2^1;         //寫輸入信號(hào)
sbit DA_CS = P2^0;   //片選信號(hào)


//定義按鍵接口
sbit key0 = P2^2;  //增大周期
sbit key1 = P2^3;  //減小周期
sbit key2 = P2^4;  //增大幅值
sbit key3 = P2^5;  //減小幅值

//延時(shí)
void delayms(int x)
{  uint i,j;
    for(i=x;i>0;i--)
          for(j=110;j>0;j--);
}

/**********************************
外設(shè)初始化函數(shù)
***********************************/
void da_init()          
{
   DA_WR = 0;
   DA_CS = 0;
   DA_DATA = 0;
   key0 = 1;   //按鍵置高
   key1 = 1;   //按鍵置高
   key2 = 1;   //按鍵置高
   key3 = 1;   //按鍵置高
}
/**********************************
定時(shí)器初始化函數(shù)
***********************************/
void init()          
{
   TMOD = 0x01;        //設(shè)置定時(shí)器工作方式,第二位為定時(shí)器0
   TH0 = (65536 - T)/256; //定時(shí)器0高8位  定時(shí)時(shí)間1ms
   TL0 = (65536 - T)/256; //定時(shí)器0低8位
   TR0 = 1;           //打開定時(shí)器
   ET0 = 1;           //開定時(shí)器中斷
   EA = 1;     //開總中斷
}

/**********************************
按鍵檢測(cè)函數(shù)
***********************************/
void key_check()
{
   /*按鍵端口置高*/
   key0 = 1;
   key1 = 1;
   key2 = 1;
   key3 = 1;

   /*增大周期*/
   if(key0 == 0)
   {
                   delayms(5);         //按鍵消抖
                if(key0 == 0)   
                {
                  cycle_T = cycle_T + 2000;   //每次增加2000us
                  /*限幅*/
                  if (cycle_T > CYCLE_MAX)
                  {
                          cycle_T        =  CYCLE_MAX;
                  }
                }
                while(!key0);        //等待按鍵松開
   }
   /*減小周期*/
   if(key1 == 0)
   {
                   delayms(5);         //按鍵消抖
                if(key1 == 0)   
                {
                  cycle_T = cycle_T - 2000;   //每次減小2000us
                  /*限幅*/
                  if (cycle_T < CYCLE_MIN)
                  {
                          cycle_T        =  CYCLE_MIN;
                  }
                }
                while(!key1);        //等待按鍵松開
   }
   /*增大幅值*/
   if(key2 == 0)
   {
                   delayms(5);         //按鍵消抖
                if(key2 == 0)   
                {
                  Amp = Amp + 1.0f;
                  if (Amp >= AMP_MAX)
                           Amp = AMP_MAX;
                }
                while(!key2);        //等待按鍵松開
   }
   /*減小幅值*/
   if(key3 == 0)
   {
                   delayms(5);         //按鍵消抖
                if(key3 == 0)   
                {
                  Amp = Amp - 1.0f;
                  if (Amp <= AMP_MIN)
                           Amp = AMP_MIN;
                }
                while(!key3);        //等待按鍵松開
   }

}

/**********************************
波形發(fā)生函數(shù)
***********************************/
void wave()
{
        float sinAngle = 0.0f;

        Angle ++;   //角度自加
        if (Angle >= 360)
                Angle = 0;       
        sinAngle = sin(((float)Angle * PI / 180.0f));   //求角度對(duì)應(yīng)的正弦值  返回[-1,1]
        sinAngle = sinAngle * Amp / AMP_MAX;     //按照幅值范圍等比例放大縮小
        DA_DATA         = (int)(((sinAngle + 1.0f) / 2.0f) * 255.0f);
}

void main()
{  
   init(); //定時(shí)器初始化
   cycle_T = CYCLE_DEFAULT;  //初始化為默認(rèn)正弦周期
   Amp = AMP_DEFAULT;       //初始化為默認(rèn)幅值     
   da_init();    //DA初始化
   while(1)
   {  
     key_check();
   }
}

void T0_time() interrupt 1
{
        TH0 = (65536 - T)/256; //定時(shí)器0高8位  定時(shí)時(shí)間1ms
    TL0 = (65536 - T)/256; //定時(shí)器0低8位
        time ++;
        if (time > (cycle_T / T))   //0.1ms
        {
           time = 0;
           wave();          //波形發(fā)生函數(shù)
        }       
}
ID:81196 發(fā)表于 2021-6-16 08:42
直接輸入數(shù)值進(jìn)行轉(zhuǎn)換不行嗎,不要搞太復(fù)雜.
ID:777356 發(fā)表于 2021-6-2 22:56
我的程序大概就這樣
#include<reg51.h>
#include<absacc.h>

#define DAC0832 XBYTE[0x8000]
#define zkb 25
unsigned char tamp=0xff,a=0;
unsigned char b = 0;

void UartInit()
{
        SCON =0x50; // SCON: 模式 1, 8-bit UART, 使能接收
        TMOD |= 0x20; // TMOD:timer 1, mode 2, 8-bit 重裝
        TH1 =TL1= 0xFD; // TH1: 重裝值9600 波特率 晶振 11.0592MHz
        TR1 =1; // TR1: timer 1 打開
        EA = 1; //打開總中斷
        ES = 1; //打開串口中斷
        PCON=0;
}

void main()
{

        TMOD=0x01;
        EA=1;
        TR0=1;
        ET0=1;
  TH0 = 0xF7;
        TL0 = 0x00;
        DAC0832=tamp;
        UartInit();
        while(1);
        
}

void js() interrupt 1
{
        if(b == '1')
        {
                TH0 = 0x0f;
                TL0 = 0x00;
        }
        else
        {
                TH0 = 0xF7;
                TL0 = 0x00;
        }
        a++;
        if(a==(zkb*2)/5)
        {
                tamp=~tamp;
                DAC0832=tamp;        
        }
        if(a==40)
        {
                tamp=~tamp;
                DAC0832=tamp;
                a=0;
        }
               
}

void Uart_Receive(void) interrupt 4         
{
//        unsigned char ch,num;
        ES = 0;
        
        if (RI)                                        //如果接收完成則進(jìn)入
        {
                b = SBUF;
        }
        RI = 0;                            //RI清0,重新接收
        ES = 1;                            //串口1中斷允許                        
}

0.png (98.92 KB, 下載次數(shù): 56)

0.png

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

ID:366877 發(fā)表于 2021-6-2 22:14
這就相當(dāng)于50個(gè)動(dòng)作,可以通過(guò)串口發(fā)送編碼,接收編碼解碼后控制即可。

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久黄色网 | 成人不卡在线 | 日韩一区中文字幕 | 亚洲成av人片在线观看无码 | 成人在线免费观看av | 精品欧美乱码久久久久久 | 综合久 | 青娱乐自拍 | 蜜桃五月天 | 欧美视频xxx| 尤物在线精品视频 | 一本一道久久a久久精品综合蜜臀 | 成人影院网站ww555久久精品 | 国产在线精品一区二区三区 | 超碰97人人人人人蜜桃 | 久久国产精品视频 | 国产成人99久久亚洲综合精品 | 91国自产 | 日韩精品一区二区三区老鸭窝 | 黄色免费网站在线看 | 国产欧美一级 | 麻豆hd | 国产精品.xx视频.xxtv | 成人欧美一区二区三区视频xxx | 久草.com | 亚洲精品久久久久中文字幕欢迎你 | 中文字幕一区二区三区精彩视频 | 99re在线观看| 成人精品免费视频 | 在线免费观看黄色av | 涩涩操 | 操到爽 | 欧美日韩一区不卡 | 一区二区三区四区国产 | 日韩av一区二区在线观看 | av一区在线观看 | 超级乱淫av片免费播放 | 男人av网 | 亚洲 精品 综合 精品 自拍 | 久久成人精品一区二区三区 | 96久久久久久 |