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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數(shù): 3976 | 評(píng)論數(shù): 6 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(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è)功能或者不用那么全,只是能通過串口發(fā)送一個(gè)字母然后改變一下頻率也行,實(shí)在是不會(huì)了 單片機(jī)源程序如下: #include< ...

回復(fù)

ID:593706 發(fā)表于 2021-6-16 18:01
給你說一個(gè)思路,程序你自己寫。通過上位機(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
不懂得再問
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;     //開總中斷
}

/**********************************
按鍵檢測函數(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)作,可以通過串口發(fā)送編碼,接收編碼解碼后控制即可。

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品午夜视频免费 | 国产精品高潮呻吟久久 | 国产精品久久久久久久模特 | 国产真实乱对白精彩久久小说 | 九九在线| 欧美久久视频 | 欧美一级毛片免费观看 | 欧美三级免费观看 | 日韩不卡三区 | 日韩成人免费在线视频 | 超碰人人做| 精品婷婷| 99re在线视频 | 97av视频| 欧美在线观看一区二区 | 婷婷色国产偷v国产偷v小说 | 久久国产精品一区 | 99久久久国产精品 | 国产一区| 亚洲v区 | 欧美aⅴ| 日日噜噜夜夜爽爽狠狠 | 亚洲v区| 日韩精品在线一区 | 亚洲第一福利网 | 蜜桃官网 | 亚洲乱码一区二区三区在线观看 | 亚洲国产看片 | 久久久久久久久蜜桃 | www.久| 伊人激情网 | 91视频正在播放 | 国产成人99久久亚洲综合精品 | 久久久国产精品 | 午夜影晥| 一区二区三区精品在线视频 | 成人精品一区亚洲午夜久久久 | 色爱综合网 | 日韩欧美国产一区二区 | 99免费精品视频 | 在线免费观看毛片 |