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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2966|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)制作音頻分貝測試的程序?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:269260 發(fā)表于 2018-6-20 11:50 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 wdsg 于 2018-6-20 11:52 編輯

原理圖能運(yùn)行,把lcd改成了led,程序是lcd的,但是不會改程序,有大神可以教一下嗎???

程序:#include <reg52.h>
unsigned long int fre;
unsigned char time;
unsigned int count;
unsigned int count1;
sbit   LCD_RS=P1^0;          //片選信號
sbit   LCD_RW=P1^1;          //讀寫信號
sbit   LCD_E=P1^2;           //使能信號
#define LCD_DB  P0        //數(shù)據(jù)信號
unsigned char character[10]={0};//在屏幕上顯示的字符串
unsigned char character_1[]={"fre= Hz"};
unsigned char FLAG = 0;  //是否分頻選擇標(biāo)志
void LCD_init(void);//初始化函數(shù)   
void LCD_write_command(unsigned char command);//寫指令函數(shù)         
void LCD_write_data(unsigned char dat);//寫數(shù)據(jù)函數(shù)           
void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);//在某個屏幕位置上顯示一個字符,X(0-15),y(1-2)
void delay_n40us(unsigned int n);//延時函數(shù)
void timer_init();            //中斷初始化函數(shù)  
//-----------------------------延時函數(shù)---------------------------
void delay_n40us(unsigned int n)                  //延時函數(shù)
{
        unsigned int i;
        unsigned char j;            
        for(i=n;i>0;i--)
        for(j=0;j<2;j++);         
}
void delay_1s()
{
        unsigned int i,j;
        for(i = 0;i<100;i++)
                for(j = 0;j<1000;j++);
}
//---------------------lcd1602液晶顯示函數(shù)--------------------                                    
void LCD_init(void)         //液晶初始化函數(shù)
{
        LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
        LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
        LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
        LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
        LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
        LCD_write_command(0x01);//清除屏幕顯示         
        delay_n40us(100);//清屏延時
}
void LCD_write_command(unsigned char dat)  //寫命令函數(shù)
{
        LCD_DB=dat;
        LCD_RS=0;//指令         
        LCD_RW=0;//寫入         
        LCD_E=1; //使能         
        LCD_E=0;
        delay_n40us(1);//寫命令延時   
}         
void LCD_write_data(unsigned char dat)          //寫數(shù)據(jù)函數(shù)
{
        LCD_DB=dat;
        LCD_RS=1;//數(shù)據(jù)         
        LCD_RW=0;//寫入         
        LCD_E=1;//使能  
        LCD_E=0;
        delay_n40us(1);         //寫數(shù)據(jù)延時
}
void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//顯示一個字符
{
        unsigned char address;
        if(y==1)
                 address=0x80+x;         //顯示在第一排的時候的x的地址
        else
                 address=0xc0+x;         //顯示在第二排的時候的x的地址
        LCD_write_command(address);         //輸入地址
        LCD_write_data(dat);                 //輸入數(shù)據(jù)
}
void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//顯示一個數(shù)字
{
        unsigned char address;
        if(y==1)
                 address=0x80+x;         //顯示在第一排的時候的x的地址
        else
                 address=0xc0+x;         //顯示在第二排的時候的x的地址
        LCD_write_command(address);         //輸入地址
        LCD_write_data(dat+48);                 //輸入數(shù)據(jù)
}
void dis_num(void)
{
        unsigned char i=0,j=0,k=0;
        LCD_write_command(0x01);//清除屏幕顯示
        character[0] = fre/10000000;
        character[1] = fre/1000000%10;
        character[2] = fre/100000%10;
        character[3] = fre/10000%10;
        character[4] = fre/1000%10;
        character[5] = fre/100%10;
        character[6] = fre/10%10;
        character[7] = fre%10;
    character[8] = 'H';
        character[9] = 'z';
        for(i = 0;i<4;i++)                 //顯示“fre=”
        {
                 LCD_disp_char(i+0,1,character_1);
        }
        for(i = 0;i<10;i++)         //判斷第一個不為0的數(shù)
        {
                if(character!=0)
                        break;
        }
        k = 8-i;
        for(j = 0;j<k;j++)         //顯示所有的數(shù)字
        {
                        LCD_disp_num(4+j,1,character[i++]);        
        }
    for(i = 5;i<7;i++)         //顯示“Hz”
        {
                 LCD_disp_char(j+4,1,character_1);
                j++;
        }
}
//----------------主函數(shù)--------------------
void main()
{
        unsigned char i;
        LCD_init();
        timer_init();             //定時/計數(shù)器初始化
        for(i = 0;i<4;i++)
        {
                 LCD_disp_char(i+0,1,character_1);
        }
        while(1)
        {
                dis_num();         //顯示
                delay_1s();
        }
}
//-------------------定時/計數(shù)器初始化--------------
void timer_init(void)         //定時/計數(shù)器初始化
{
        TMOD=0x66;                //計數(shù)器0和計數(shù)器1工作工作方式2,自動重裝初值
        TH0=0;                    //計數(shù)器初值為0
        TL0=0;
        TR0=1;                    //計數(shù)器開始計數(shù)            
        ET0=1;                    //打開計數(shù)器0中斷   
        TH1=0;                    //計數(shù)器初值為0
        TL1=0;
        TR1=1;                    //計數(shù)器開始計數(shù)            
        ET1=1;                    //打開計數(shù)器1中斷   
        RCAP2H=(65536-62500)/256; //在程序初始化的時候給RCAP2L和RCAP2H賦值,
        RCAP2L=(65536-62500)%256; //TH2和TL2將會在中斷產(chǎn)生時自動使TH2=RCAP2H,TL2=RCAP2L。
        TH2=RCAP2H;               //12M晶振下每次中斷62.5ms(1s=1000ms=62.5ms×16)
        TL2=RCAP2L;
        ET2=1;                    //打開定時器2中斷         
        TR2=1;                    //定時器2開始計時  
        EA=1;                     //開總中斷   
}
//------------------中斷函數(shù)----------------------
void timer2(void) interrupt 5 //定時器2中斷(62.5ms)
{
        time++;
        TF2=0;                    //定時器2的中斷標(biāo)志位TF2不能夠由硬件清零,所以要在中斷服務(wù)程序中將其清零
        if (time==16)             //定時1s時間到  
        {
           time=0;                //計時清0
           EA=0;                  //關(guān)中斷                 
           fre=(long)count1*256+TL1;     //count*256強(qiáng)制轉(zhuǎn)換成long型,否則將不產(chǎn)生進(jìn)位~先判斷分頻后(計數(shù)器1)
           FLAG = 0;
         
           if(fre<2000)//如果不到200KHz則讀取分頻前(計數(shù)器0)頻率(200K÷100=2000)
           {
                           fre = (long)count*256+TL0;
                        FLAG = 1;         
           }
                if(!FLAG)
                {
                        fre = fre *100;//100分頻
                }
           TL0=0;                 //清零計數(shù)器0計數(shù)            
           TH0=0;
           TL1=0;
           TH1=0;
           count=0;               //清零計數(shù)器0計數(shù)         
           count1=0;
           EA=1;                  //開中斷            
        }
}
//----------------------------------------------------------------
void timer0(void) interrupt 1 //計數(shù)器0中斷(100分頻前)         
{
        count++;
}               
//----------------------------------------------------------------
void timer1(void) interrupt 3 //計數(shù)器1中斷(100分頻后)
{
        count1++;
}

評分

參與人數(shù) 1黑幣 +2 收起 理由
云走殘陽 + 2

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:355221 發(fā)表于 2018-6-20 15:50 | 只看該作者
LCD與數(shù)碼管完全不同。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品国产一区二区三区不卡 | 免费a网站 | 久久精品a| 福利网站在线观看 | 日韩欧美一区在线 | 久久国产精品网 | 一区二区三区在线看 | 亚洲狠狠丁香婷婷综合久久久 | 中文字幕 在线观看 | 日本特黄特色aaa大片免费 | 日韩一区二区三区四区五区六区 | 国产免费a视频 | 欧美日韩大片 | 日本在线视频一区二区 | 免费一区二区三区在线视频 | 亚洲欧美精品在线 | 91av免费看| 成人在线免费视频观看 | 亚洲69p| 久久青视频| 蜜桃五月天 | 国家aaa的一级看片 h片在线看 | 国产精品不卡 | 国产精品久久久久久 | 日韩看片| 日韩在线视频一区 | 毛片1 | 欧美精品91 | 亚洲精品乱码久久久久久9色 | 中文在线一区二区 | aaaaaa大片免费看最大的 | 逼逼网 | 狠狠色综合欧美激情 | 成人在线免费观看 | 国产精品毛片久久久久久久 | www精品美女久久久tv | 欧美a区| 久久精品国产免费看久久精品 | 日韩高清国产一区在线 | 久久999| a级大片免费观看 |