娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月03日(星期六)

2018年05月03日 | MSP430 移植printf和scanf

發(fā)布者:Shuangfei 來源: eefocus關鍵字:MSP430  移植printf  scanf 手機看文章 掃描二維碼
隨時隨地手機看文章

硬件介紹:

硬件部分只需字符型輸入輸出設備:scanf從輸入字符型設備讀取字符,printf輸出到字符型輸出設備。在這里,我選用的字符型輸入設備是超級終端,通過串口單片機連接,輸入字符;輸出設備是超級終端和12864的液晶。scanf從串口讀入字符,printf輸出字符到串口和液晶。


有關串口的預提信息參考:MSP430程序庫<二>UART異步串口。


有關液晶的具體信息參考:MSP430程序庫<三>12864液晶程序庫。


scanf還可以從按鍵讀取信息,可以參考移置方法自行移置。


程序實現(xiàn):

printf

單片機在調用printf時,printf是負責將數(shù)據(jù)解析成ASCII碼流,通過調用putchar函數(shù)依次將字符發(fā)出。如果在putchar內編寫從串口發(fā)送一字節(jié)數(shù)據(jù),則printf的結果將從單片機串口發(fā)送出;如果putchar是向液晶寫字符,讓液晶顯示一個字符,則printf的結果將顯示在液晶上。本程序實現(xiàn)putchar同時向串口和液晶同時發(fā)送一個字符(液晶是顯示一個字符)。


putchar函數(shù)如下:


int putchar(int ch)

{

    putchar2Com(ch);

    putchar2Lcd(ch);

    return (ch);

}

程序先向串口發(fā)送一個字符,然后像向晶發(fā)送字符。


其中:putchar2Com,向串口發(fā)送一個字符,代碼如下:


int putchar2Com(int ch)

{

    if (ch == '\n')           //  '\n'(回車)擴展成 '\n''\r' (回車+換行) 

    {

        UartWriteChar('\r') ;   //0x0d 換行

    }

    UartWriteChar(ch);        //從串口發(fā)出數(shù)據(jù)  

    return (ch);

}

代碼僅僅調用向串口寫字符的函數(shù)UartWriteChar(ch)(詳見Uart.c,在<二>中有介紹),當要輸出換行時,需先輸出’\n’將光標移至本行首位置,還需要’\r’(換行)才能將光標置于下一行起始位置,即將’\n’擴展為’\r’,’\n’兩個字節(jié)依次發(fā)出。


purchar2Lcd函數(shù)比較復雜,因為我所使用的12864液晶是中文字庫的液晶,每行8個地址,可以顯示8個中文字符或16個英文字符,而putchar只發(fā)出一個字節(jié),需要判斷每個地址的前半字還是后半字(因為每個字可以顯示中文,如果中文的兩個字節(jié)在相鄰的兩個地址上,將不會顯示,或是顯示亂碼)。


上代碼:


int putchar2Lcd(int ch)

{

    char addr,dat;

    

    if (ch == '\n')           //  '\n'(回車),換行

    {

        ChangeNextRow();

    }

    else

    {

        addr = LcdReadAddr();

        if(ch < 0x80)

        {

            LcdWriteData(ch);

        }

        else

        {

            LcdWriteData(0x20);     //寫入一個空字符,根據(jù)地址判斷是否為前半字

            if(addr == LcdReadAddr())   //前半字 從新寫入ch字符

            {

                LcdWriteComm(addr);

                LcdWriteData(ch);

            }

            else

            {

                LcdWriteComm(addr);

                dat = LcdReadData();

                if(dat < 0x80)           //前一個字符是英文字符

                {

                 LcdWriteData(0x20);                 //空格

              }

                LcdWriteData(ch);

            }

        }

    }

    if((addr != LcdReadAddr()) &&               //寫入的是行最后位的后半字則換行

       (addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))

    {

        ChangeNextRow();

    }

    return (ch);

}

這個函數(shù)首先判斷換行;然后處理其他一般字符,如果是英文字符,不用考慮前后半字,只需正常寫入液晶即可;如果是中文字符,在判斷是否是前半字,前半字則直接寫入,后半字則判斷之前寫入的前半字是否是中文,是則直接寫入,不是則把英文字符移入后半字,然后寫入;最后判斷是否到行尾,是則換行。


程序更新為:更新日期:20110821 18:51

目的是修復原來,行尾前半字為英文,再輸入中文會顯示亂碼。

int putchar2Lcd(int ch)

{

    char addr,dat;

    char changeRowFlag = 0;

    

    if (ch == '\n')         //  '\n'(回車),換行

    {

        ChangeNextRow();

        changeRowFlag = 1;

    }

    else if (ch == '\b')    // '\b' (退格)

    {

        BackSpace();

    }

    else

    {

        addr = LcdReadAddr();

        if(ch < 0x80)

        {

            LcdWriteData(ch);

        }

        else

        {

            LcdWriteData(0x20);     //寫入一個空字符,根據(jù)地址判斷是否為前半字

            if(addr == LcdReadAddr())   //前半字 從新寫入ch字符

            {

                LcdWriteComm(addr);

                LcdWriteData(ch);

            }

            else

            {

                LcdWriteComm(addr);

                dat = LcdReadData();

                if(dat < 0x80)           //前一個字符是英文字符

                {

                    LcdWriteData(0x20);                 //空格

                }

                if((addr != LcdReadAddr()) &&               //寫入的是行最后位的后半字則換行

                   (addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))

                {

                    ChangeNextRow();

                    changeRowFlag = 1;

                }

                LcdWriteData(ch);

            }

        }

    }

    if((addr != LcdReadAddr()) &&   //寫入的是行最后位的后半字則換行,且未換過行

       (changeRowFlag == 0) &&   

       (addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))

    {

        ChangeNextRow();

    }

    return (ch);

}

前后半字判斷方法如下:讀液晶地址,向液晶寫入一個空格,再讀地址,兩地址相同則是前半字,不同則是后半字。讀地址函數(shù)在Lcd12864.c中,新加入函數(shù),代碼如下:


char LcdReadAddr()

{

    char ch;

    

    WaitForEnable();

    

    CLR_RS;

    SET_RW;

    

    DATA_DIR_IN;

    

    SET_EN;

    _NOP();

    

    ch = DATA_IN;    //讀數(shù)據(jù)

    CLR_EN;

    DATA_DIR_OUT;

    

    return (ch|0x80);

}

這個是讀地址,ch|0x80是因為寫入液晶地址首位應為1.。


液晶中新加入兩個函數(shù),一個是上邊的讀地址,另外一個是讀數(shù)據(jù);作用是讀取液晶當前地址處的數(shù)據(jù),從而判斷之前半字是否是中文。代碼如下:


char LcdReadData()

{

    char ch;

    

    WaitForEnable();

    

    SET_RS;

    SET_RW;

    

    DATA_DIR_IN;

    

    SET_EN;

    _NOP();

    

    ch = DATA_IN;    //讀數(shù)據(jù)

    CLR_EN;

    DATA_DIR_OUT;

    

    return ch;

}

另外 putchar還調用了換行——ChangeNextRow函數(shù),完成液晶輸出換至下一行。


代碼如下:


void ChangeNextRow()

{

    char addr;

    

    addr = LcdReadAddr();       //當前地址

    if(addr <= 0x88)

    {

        LcdWriteComm(0x90);

    }

    else if(addr <= 0x90)

    {

        LcdWriteComm(0x98);

    }

    else if(addr <= 0x98)

    {

        LcdWriteComm(0x88);

    }

    else

    {

        AddNewline();           //添加行,同時向上滾動

        LcdWriteComm(0x98);

    }

}

讀取當前地址,判斷在哪一行,然后寫入下一行首地址;如果是最后一行,則所有安徽那個向上移,寫入最后一行首地址。


AddNewLine函數(shù)完成所有行向上滾動一行,然后地址定位至最后一行。


代碼如下:


void AddNewline()

{

    char str[17];

    str[16] = 0;

    

    //第二行 移至第一行

    LcdWriteComm(0x90);

    LcdReadData();              //空讀取

    for(int i = 0;i<16;i++)

    {

        str[i] = LcdReadData();

    }

    LcdWriteString(0x80,str);

    

    //第三行 移至第二行

    LcdWriteComm(0x88);

    LcdReadData();

    for(int i = 0;i<16;i++)

    {

        str[i] = LcdReadData();

    }

    LcdWriteString(0x90,str);

    

    //第四行 移至第三行

    LcdWriteComm(0x98);

    LcdReadData();

    for(int i = 0;i<16;i++)

    {

        str[i] = LcdReadData();

    }

    LcdWriteString(0x88,str);

    

    //第四行 空白

    LcdWriteString(0x98,"                ");    //十六個空格

}

讀出下一行數(shù)據(jù),寫入上一行,最后一行寫入空格即可。


到此putchar函數(shù)全部完成,printf移植的程序部分完成,使用方法詳見使用示例。


scanf

scanf和printf類似,其只負責格式化輸入的字符,字符來源是從getchar函數(shù)獲取;同樣,在使用scanf函數(shù)之前,要針對字符輸入源自行編寫getchar函數(shù)


最簡getchar:


int getchar()

{

    return (putchar(UartReadChar()));

}

這是最簡單的getchar函數(shù),直接調用讀取字符函數(shù),輸出并返回。


但是人的輸入過程會偶爾犯錯誤的,為了支持退格鍵等,需要開辟一個緩存區(qū)。


詳細代碼如下:


#define LINE_LENGTH 80          //行緩沖區(qū)大小,決定每行最多輸入的字符數(shù)


/*標準終端設備中,特殊ASCII碼定義,請勿修改*/

#define InBACKSP 0x08           //ASCII  <--  (退格鍵)

#define InDELETE 0x7F           //ASCII (DEL 鍵)

#define InEOL '\r'              //ASCII  (回車鍵)

#define InSKIP '\3'             //ASCII control-C

#define InEOF '\x1A'            //ASCII control-Z


#define OutDELETE "\x8 \x8"     //VT100 backspace and clear

#define OutSKIP "^C\n"          //^C and new line

#define OutEOF "^Z"             //^Z and return EOF

 int getchar()

{

    static char inBuffer[LINE_LENGTH + 2];      //Where to put chars

    static char ptr;                            //Pointer in buffer

    char c;

    

    while(1)

    {

        if(inBuffer[ptr])                       //如果緩沖區(qū)有字符

            return (inBuffer[ptr++]);           //則逐個返回字符

        ptr = 0;                                //直到發(fā)送完畢,緩沖區(qū)指針歸零

        while(1)                                //緩沖區(qū)沒有字符,則等待字符輸入

        {

            c = UartReadChar();                 //等待接收一個字符

            if(c == InEOF && !ptr)              //==EOF==  Ctrl+Z 

            {                                   //只有在未入其他字符時才有效

                printf(OutEOF);                 //終端顯示EOF符

                return EOF;                     //返回 EOF(-1)

            }

            if(c==InDELETE || c==InBACKSP)      //==退格或刪除鍵==

            {

                if(ptr)                         //緩沖區(qū)有值

                {

                    ptr--;                      //從緩沖區(qū)移除一個字符

                    printf(OutDELETE);          //同時顯示也刪掉一個字符

                }

            }

            else if(c == InSKIP)                //==取消鍵 Ctrl+C ==

            {

                printf(OutSKIP);                //終端顯示跳至下一行

                ptr = LINE_LENGTH + 1;          //==0 結束符==

                break;

            }

            else if(c == InEOL)                 //== '\r' 回車==

            {

                putchar(inBuffer[ptr++] = '\n');//終端換行

                inBuffer[ptr] = 0;              //末尾添加結束符(NULL)

                ptr = 0;                        //指針清空

                break;

            }

            else if(ptr < LINE_LENGTH)          //== 正常字符 ==

            {

                if(c >= ' ')                    //刪除 0x20以下字符

                {

                    //存入緩沖區(qū)

                    putchar(inBuffer[ptr++] = c);

                }

            }

            else                                //緩沖區(qū)已滿

            {

                putchar('\7');                  //== 0x07 蜂鳴符,PC回響一聲

            }

        }

    }

}

注釋已經(jīng)很詳細了,這里不再詳細解釋。


scanf的移植程序部分已經(jīng)完成,如果需要從鍵盤讀入字符,可以仿照上述函數(shù)寫getchar函數(shù)。具體使用和設置見使用示例。


另外,iar的安裝文件夾下,430文件夾下有一個src文件夾,lib/clib文件夾下(我的具體文件夾是:D:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\430\src\lib\clib\getchar.c),有一個getchar.c文件,這是getchar的函數(shù),內容如下:


#include "stdio.h"


extern char _low_level_get(void);       /* Read one char from I/O */

                                        /* Should be supplied by user */


static void put_message(char *s)

{

  while (*s)

    putchar(*s++);

}



#define LINE_LENGTH 80          /* Change if you need */


#define In_DELETE 0x7F          /* ASCII */

#define In_EOL '\r'             /* ASCII */

#define In_SKIP '\3'            /* ASCII control-C */

#define In_EOF '\x1A'           /* ASCII control-Z */


#define Out_DELETE "\x8 \x8"    /* VT100 backspace and clear */

#define Out_SKIP "^C\n"         /* ^C and new line */

#define Out_EOF "^Z"            /* ^Z and return EOF */


int getchar(void)

{

  static char io_buffer[LINE_LENGTH + 2];     /* Where to put chars */

  static int ptr;                             /* Pointer in buffer */

  char c;


  for (;;)

  {

    if (io_buffer[ptr])

      return (io_buffer[ptr++]);

    ptr = 0;

    for (;;)

    {

      if ((c = _low_level_get()) == In_EOF && !ptr)

      {

        put_message(Out_EOF);

        return EOF;

      }

      if (c == In_DELETE)

      {

        if (ptr)

        {

          ptr--;

          put_message(Out_DELETE);

        }

      }

      else if (c == In_SKIP)

      {

        put_message(Out_SKIP);

        ptr = LINE_LENGTH + 1;  /* Where there always is a zero... */

        break;

      }

      else if (c == In_EOL)

      {

        putchar(io_buffer[ptr++] = '\n');

        io_buffer[ptr] = 0;

        ptr = 0;

        break;

      }

      else if (ptr < LINE_LENGTH)

      {

        if (c >= ' ')

        {

          putchar(io_buffer[ptr++] = c);

        }

      }

      else

      {

        putchar('\7');

      }

    }

  }

}

_low_level_get(void); 這個函數(shù)需用戶定義,不過這個getchar函數(shù)不支持退格鍵,可以更改以支持;_low_level_get(void);這個函數(shù)可以直接調用UartReadChar();這個函數(shù),使用時,把getchar.c加入項目,同時在項目中添加_low_level_get(void);函數(shù),函數(shù)體只有一句:return UartReadChar();即可。


程序調用示例:

程序使用方式,項目中添加printf.c文件和scanf.c文件(用printf函數(shù)則加printf.c文件,用scanf函數(shù)就添加scanf.c文件),在要使用函數(shù)的地方包含stdio.h(編譯器自帶庫——標準輸入輸出庫)

image_thumb1

還要設置使用庫和printf的大小:

image_thumb4

如果不進行這項設置,使用scanf時將報錯:

Error[e27]: Entry "getchar" in module Scanf ( G:\work\程序庫\Printf\Debug\Obj\Scanf.r43 ) redefined in module ?getchar ( D:\Program Files\IAR Systems\Embedded;用的是C語言,這里選擇CLIB。

然后設置庫選項:

image_thumb7

這里選擇大尺寸,目的是支持所有的格式,因為所用單片機有64kb的程序存儲空間,足夠使用,如果程序存儲空間不夠大,推薦選擇中尺寸或小尺寸。大尺寸printf占用空間 4.8kb、scanf :2.3kb,中尺寸 printf:2.5kb、scanf:1.6kb,小尺寸 printf:1.6kb。實際使用時根據(jù)需要進行選擇。

同時要加入Lcd12864的使用(c文件,h文件(要調用lcd12864的初始化函數(shù)))Uart和液晶一樣要調用初始化函數(shù)。

#include

#include

#include "Uart.h"

#include "Lcd12864.h"

頭文件包含。


void main( void )

{

    // Stop watchdog timer to prevent time out reset

    WDTCTL = WDTPW + WDTHOLD;

    ClkInit();

    LcdInit();

    UartInit(38400,'n',8,1);//串口初始化,設置成38400bps,無校驗,8位數(shù)據(jù),1位停止

    //int a;

    _EINT();

    //scanf("%d",&a);

    //printf("劉中原%d\n",a);

    printf("劉中原%f\n",23.6);

    printf("劉中原%1.2f\n",23.6);

}

使用時,先調用液晶和串口的初始化函數(shù),然后開中斷;就可以正常的調用scanf和printf函數(shù)了。


至此,printf和scanf的移植全部完成,使用這兩個函數(shù)將給單片機的輸入輸出帶來極大方便。另外,Lcd12864的液晶使用是4行顯示,空間較小,可能需要定位至具體位置,以使界面看起來更合理,為此,在Printf中再添加一個定位函數(shù)(GotoXY):


void GotoXY(char x,char y)

{

    char addr;

    

    if(y==0)

    {

        addr = 0x80 + x / 2;

    }

    else if(y==1)

    {

        addr = 0x90 + x / 2;

    }

    else if(y==2)

    {

        addr = 0x88 + x / 2;

    }

    else

    {

        addr = 0x98 + x / 2;

    }

    LcdWriteComm(addr);

    if(x % 2)                   //是奇數(shù),后移一位(寫入空格)

    {

        LcdWriteData(0x20);

    }

}

這樣就方便了液晶程序的編寫。


又加入一個函數(shù),在printf.c里,目的是支持退格鍵,內容如下:


void BackSpace()

{

    char addr,dat;

    

    addr = LcdReadAddr();       //當前地址

    LcdWriteData(0x20);         //寫入一個空字符,根據(jù)地址判斷是否為前半字

    if(addr == LcdReadAddr())   //前半字

    {

        if(addr == 0x80)

            return;

        else if(addr == 0x90)

            addr = 0x87;

        else if(addr == 0x88)

            addr = 0x97;

        else if(addr == 0x98)

            addr = 0x8F;

        else 

            addr = addr - 1;

       

        LcdWriteComm(addr);

        LcdReadData();          //空讀取

        dat = LcdReadData();

        LcdWriteComm(addr);

        if(dat < 0x80)

            LcdWriteData(dat);

    }

    else

    {

        LcdWriteComm(addr);

    }

}


關鍵字:MSP430  移植printf  scanf 引用地址:MSP430 移植printf和scanf

上一篇:MSP430 SPI總線詳解
下一篇:MSP430 ADC12采樣轉換模式詳解

推薦閱讀

“蛟龍”“海龍”“潛龍”三龍潛水器協(xié)同作業(yè)模式圖4月30日,在完成深海最后一潛后,“潛龍三號”跟隨“大洋一號”船開始返航。4月20日開始,這個中國最先進自主無人潛水器,先后進行了包括兩次海試和兩次試驗性應用在內的四次潛水作業(yè),在全新挑戰(zhàn)中不斷刷新著紀錄。最近一段時間,大洋深處熱鬧非凡,各路探海英雄頻頻刷新著中國自主研發(fā)的深海裝備挺進藍...
之前我們看到過相關報道,芯片巨頭英特爾即將推出自家獨立顯卡產品,來與英偉達和AMD進行直接競爭。去年年底,英偉達發(fā)布了最新的RTX系列顯卡,并且支持實時光線追蹤技術。根據(jù)國外媒體報道,現(xiàn)在英特爾宣布未來也將在自家顯卡上支持這一新功能。對于游戲玩家來說,光線追蹤技術可以通過實時呈現(xiàn)光線在游戲環(huán)境上的吸收、反射或折射來呈現(xiàn)堪比電影級別的效...
  IT之家5月2日消息 據(jù)外媒Windows Latest報道,微軟將在5月發(fā)布Surface Go 2,并且相關硬件規(guī)格已經(jīng)泄漏。根據(jù)零售商的清單,Surface Go 2帶有更大的顯示屏和更小的邊框。據(jù)美國FCC認證信息,Surface Go 2還搭載了英特爾的Wi-Fi 6無線網(wǎng)絡適配器,并且續(xù)航更長。  美國FCC認證的“便攜式計算設備”文件,證實了Surface Go 2的存在。Surfa...

史海拾趣

問答坊 | AI 解惑

應用技巧/單片機系統(tǒng)中的紅外通信接口

本文結合復費率電能表中紅外通信的設計實從事貿易,介紹了單片機系統(tǒng)中紅外通信的軟硬件設計方法,并給出了具體的電路原理和通信源程序。…

查看全部問答∨

非接觸式傳感器

最近老板讓查一下非接觸式傳感器,可以紅外,或者霍爾,其他的也可以考慮。     具體要執(zhí)行的任務如下     他跟我描述的大概和電梯差不多,就是一個上下移動的物體,當?shù)竭_預定位置的時候發(fā)出通過傳感器發(fā)出一個信號,以前用 ...…

查看全部問答∨

DSP Group and Lantiq Complete Interoperability Testing

DSP Group and Lantiq Complete Interoperability Testing for Home Gateways and Digital Cordless Handsets DSP Group, Inc™, a leading global provider of wireless chipset solutions for converged communication ...…

查看全部問答∨

請教 怎么對地址總線的某一位賦值???

我的硬件是PXA270 通過16位數(shù)據(jù)總線連接到64MBYTE的FLASH P33,地址總線是26位 p33是由兩塊32M的flash組成的,在程序中不能同時訪問上下兩塊FLASH的地址 而是需要有一個地址總線,即最高位的A25作為內部片選,選擇當前訪問的是BOTTOM 還是top flas ...…

查看全部問答∨

新買電腦總是無故死機,請教高手?

幾個月前新買電腦總是無故死機,請教高手? 相關癥狀如下:     1.畫面定格,除非重啟或關機,其它一切操作均無效,沒有一點反應。     2.玩反恐等游戲時死機頻率大約一個半小時一次;放電影大約四小時一次。第一次開機到死 ...…

查看全部問答∨

采用TI C2000開發(fā)的太陽能逆變器(一)-TI技術研討會

基于 C2000 和 Piccolo MCU的新型太陽能套件,助力打造更環(huán)保世界。該新型太陽能套件為可再生能源市場提供先進外設、針對應用的開發(fā)硬件、原理圖 (schematics)、全面豐富的軟件算法庫和業(yè)界領先的開發(fā)環(huán)境,使設計人員能簡易地開發(fā)太陽能逆變器設計 ...…

查看全部問答∨

如何用示波器直接測量和補償高頻電纜的損耗?

前文提到,對希望對 電纜損耗進行補償?shù)墓こ處煟麄冊跍y量和表征同軸電纜的時,可能選擇不同方法。到目前為止,這些方法包括矢量網(wǎng)絡分析儀(VNA)、時域反射計 (TDR)、以及仿真工具(如 ADS之類的),方法各異,但共同點都是得到電纜的S參數(shù) ...…

查看全部問答∨

AD采集數(shù)據(jù)的幅度

AD采集的數(shù)據(jù)通過FPGA控制SRAM存儲后再由PCI傳輸?shù)缴衔粰C,16K數(shù)據(jù)長度,但是采集上來的數(shù)據(jù)幅度不一致,請問是怎么回事?…

查看全部問答∨

個人閑置FPGA開發(fā)板

這是本人在淘寶上購得的FPGA開發(fā)板的地址,http://item.taobao.com/item.htm?spm=a230r.1.10.12.XBn1Ov&id=13851235569,內有詳細內容,可供大家了解,由于個人原因,買后一直沒用過,可以說是全新的,現(xiàn)在要畢業(yè)實習離校了,想低價出售,個人的理 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 金沙县| 红安县| 徐州市| 凤庆县| 辽宁省| 泽普县| 富阳市| 祥云县| 阳山县| 秦安县| 吕梁市| 安乡县| 林周县| 加查县| 襄樊市| 山东| 都兰县| 肇庆市| 永顺县| 茌平县| 扶余县| 武夷山市| 青海省| 屯门区| 青龙| 页游| 清镇市| 和平区| 阿克| 和田市| 清水河县| 河池市| 株洲县| 玉溪市| 凯里市| 临安市| 罗城| 新丰县| 海南省| 华容县| 天台县|