第一篇:智能小車單片機課程設計報告
單片機課程設計
題 目: 專 業: 班 級: 組長 成員 成員 成員 成員
智能小車設計 計算機科學與技術
14級2班
姓名 學號
年 12 月 23 日
2016
打開命令行終端的快捷方式: ctr+al+t:默認的路徑在家目錄
ctr+shift+n:默認的路徑為上一次終端所處在的路徑.linux@ubuntu:~$ linux:當前登錄用戶名.ubuntu:主機名
:和$之間:當前用戶所處在的工作路徑.windows下的工作路徑如C:IntelLogs linux下的工作路徑是:/.../..../ ~:代表的是/home/linux這個路徑.(家目錄).ls(list):列出當前路徑下的文件名和目錄名.ls-a(all):列出當前路徑下的所有文件和目錄名,包括了隱藏文件..:當前路徑..:上一級路徑
ls-l:以橫排的方式列出文件的詳細信息
total 269464(當前這個路徑總計所占空間的大小,單位是K)drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop
chmod u-或者+r/w/x 文件名 chmod g-或者+r/w/x 文件名 chmod o-或者+r/w/x 文件名(3).cd /home/linux 進入到1目錄里并創建一個2普通文件,再退回上一級,并且刪除1目錄 6.拷貝文件.cp(copy)路徑1/源文件 路徑2:把路徑1下的文件拷貝到路徑2下
cp 路徑1/源文件 路徑2/目標文件:把路徑1下的文件拷貝到路徑2下并且重命名位目標文件.cp(copy)-r 路徑1/目錄名 路徑2:把路徑1下的目錄拷貝到路徑2下 7.剪切文件
mv(move)路徑1/源文件 路徑2:把路徑1下的文件剪切到路徑2下
mv 路徑1/源文件 路徑2/目標文件:把路徑1下的文件剪切到路徑2下并且重命名位目標文件
mv 源文件 目標文件:重命名文件
mv 路徑1/目錄名 路徑2:把路徑1下的目錄剪切到路徑2下 8.clear:清屏 9.exit 退出終端 vi編輯器.vi 文件名:如果文件不存在則創建并打開 如果文件已存在,則直接打開
VI編輯器的三種模式
1.命令行模式:剛進入編輯器的時候,默認處在這種模式下
2.編輯模式(插入模式):輸入a/i/o即可進入,按下esc鍵退回命令行模式,再輸入冒號 ,即可進入底行模式.3.底行模式下:w(保存),q(退出),wq(保存并退出),q!(強制退出不保存)按下退格鍵,刪除冒號,即可進入命令行模式.終極保存法;w!sudo tee %d回車再回車即可
命令行模式下的快捷操作: 1.整行復制:光標移動想要復制的那一行,輸入yy即可,再把光標移動到你想要粘貼位置的上一行,輸入p即可
2.多行復制:光標移動想要復制的那幾行的 6.多行剪切:光標移動想要剪切的那幾行的 再編譯一個c應用程序,在程序中來調用庫里實現的函數
gcc 應用程序名-l庫名(注意是去掉lib和.so的庫名)
文件IO linux系統下一切設備皆文件
操作文件: open():打開一個文件
read()://從文件里邊讀出數據 write()//向文件里寫入數據 close()//關閉文件
man手冊: man 2 函數名
open: 頭文件
#include
1.int open(const char *pathname, int flags);//僅限于打開一個已存在文件
參數1:文件的路徑 參數2:打開方式的標志
O_RDONLY,//只讀方式打開
O_WRONLY,//只寫方式打開
O_RDWR.//可讀可寫方式打開 返回值: 打開成功:返回一個正數(文件描述符)打開失敗:-1
2.int open(const char *pathname, int flags, mode_t mode);//可以打開一個不存在的文件 參數1:文件的路徑 參數2:打開方式的標志
O_RDONLY,//只讀方式打開
O_WRONLY,//只寫方式打開
O_RDWR.//可讀可寫方式打開
如果文件不存在必須|O_CRAET,創建該文件 參數3:權限 數 比如:0666
返回值: 打開成功:返回一個正數(文件描述符)打開失敗:-1
write: 頭文件: #include
typedef int ssize_t
ssize_t write(int fd, const void *buf, size_t count);參數1:就是open函數的返回值,文件描述符 參數2:你想要寫入的數據
參數3:你想要寫入的數據的字節大小
返回值: 寫入成功:返回的是寫入的字節大小 寫入失敗:-1
strlen:實際長度 sizeof:數組的大小
arduino viod setup(){ 端口的配置;}
void loop(){ 任務的執行;
}
arduino之呼吸燈實驗: int led=13;void setup(){ pinMode(led,OUTPUT);} void loop(){ digitalWrite(led,HIGH);delay(1000);digitalWrite(led,LOW);delay(1000);} 漸變燈: 暗->亮->暗
PWM波:可調脈沖寬度波.3,5,6,9,10,11這幾個端口可以輸出pwm波 analogWrite(pin, value)//輸出pwm波 pin:管腳號:3,5,6,9,10,11中的任意一個 value:0~255中的任何一個數: 0:占空比為0% 255:占空比位100%
遠程視頻監控步驟: 1.將jpegsrc.v8b.tar.gz(圖片庫)和mjpg-streamer-code-182.tar.gz(視頻查看軟件)拷貝到ubuntu的家目錄
2.解壓縮
tar xvf jpegsrc.v8b.tar.gz 3.cd jpeg-8b 4../configure //創建Makefile文件 5.make 6.sudo make install //安裝
程序運行時,默認尋找的頭文件的路徑在/usr/include,庫文件的路徑/lib
cd /usr/local/include sudo cp * /usr/include cd /usr/local/lib
sudo cp libjpeg* /lib
7.切換到家目錄:cd 移植查看視頻的軟件:
tar xvf mjpg-streamer-code-182.tar.gz cd mjpg-streamer-code-182 cd mjpg-streamer make clean //清除已經編譯過的程序
make
運行查看視頻的軟件:sudo./start.sh 打開火狐瀏覽器
在地址欄輸入127.0.0.1:8080 若發現視頻綠屏
先強制結束程序運行:ctl+c.解決方法:
修改start.sh
將 要對uboot環境信息進行設置
首先把撥碼開關撥到0000位置.選擇uboot的啟動方式.uboot從外存啟動.1.找到自己的COM端口號;打開putty 2.選中Serial,把波特率改為115200,端口號改為自己的端口號,Flow contrlo選擇none 3.開啟電源,會出現一個倒計時,在倒計時完成之前,隨便敲一個鍵盤.4.輸入命令print可以顯示uboot的打印信息
確保: ipaddr=192.168.1.100//代表開發板的ip地址 serverip=192.168.1.200//代表ubuntu的IP地址 bootargs=root=nfs nfsroot=192.168.1.200:/source/rootfs ip=192.168.1.100 init=/linuxrc console=ttySAC0,115200//
打開虛擬機: 1.進入到/tftpboot目錄下.把zImage拖到虛擬機,前加cp ,后加./ 使用ls查看一下是否出現zImage 2.cd /source 把rootfs這個壓縮包拖到虛擬機,前加cp ,后加./ 使用ls查看一下是否出現rootfs.tgz 3.解壓命令: sudo tar-xvf rootfs.tgz 要讓你輸入密碼;輸入1回車即可,密碼是不可見的.再用ls查看是否多了一個藍色的文件rootfs.4.修改ubuntu的ip地址.找到wiffi圖標,點擊選中edit connection->IPV4 seting->manual->add ip netmask gateway 192.168.1.200 255.255.255.0 192.168.1.1 點擊保存.關閉窗口.再打開圖標選中wired connection1 再看ip是否改回來了.5.網線連接開發板和電腦
在putty界面輸入:ping 192.168.1.200 如果host 192.168.1.200 is alive,這是掛載系統很好的征兆.not alive的話需要關閉電腦的無線網
輸入boot或者重啟開發板不要再按下任何鍵了,如果出現
####很快就要掛載成功了 如果出現TTTTTTTTTTTTTT 在ubuntu輸入命令:sudo service tftpd-hpa restart 其中sudo的作用是暫時將用戶的權限提升到超級用戶(root)的權限.如果出現Please press Enter to activate this console.代表系統掛載成功.通過gcc編譯生成的程序不能在開發板上運行.通過命令file a.out看到文件的格式為intel 30386,說明這是X86格式的程序,只能PC上運行
而不能在arm板上運行,解決措施,使用交叉編譯器來編譯.交叉編譯器的配置: 將arm-cortex_a8-linux-gnueabi.tar.bz2拖到ubuntu的家目錄
解壓命令tar-xvf arm-cor+tab鍵自動補齊,用ls查看是否生成arm-cortex_a8個目錄.配置交叉編譯器: sudo vi /etc/bash.bashrc文件
在最后一行添加export PATH=$PATH:/home/linux/arm-cortex_a8/bin 保存并退出文件
保存完成后重啟文件:source /etc/bash.bashrc
重啟成功后輸入arm-cor+tab鍵會自動補齊成arm-cortex_a8-linux-gnueabi-代表交叉編譯器配置成功.利用交叉編譯器編譯程序: arm-cortex_a8-linux-gnueabi-gcc 文件名,并將生成的可執行程序拷貝到/source/rootfs下
然后再到putty上執行./a.out就可以在開發板上運行程序了.
相關代碼
Che.c
#include “cgic.h” #include
void zigbee_serial_init(int fd){ struct termios options;
tcgetattr(fd, &options);options.c_cflag |=(CLOCAL | CREAD);options.c_cflag &= ~CSIZE;options.c_cflag &= ~CRTSCTS;options.c_cflag |= CS8;options.c_cflag &= ~CSTOPB;options.c_iflag |= IGNPAR;options.c_iflag &= ~(BRKINT | INPCK | ISTRIP | ICRNL | IXON);
//options.c_cc[VTIME] = 2;options.c_cc[VMIN] = 12;
options.c_oflag = 0;options.c_lflag = 0;
cfsetispeed(&options, B115200);cfsetospeed(&options, B115200);
tcsetattr(fd,TCSANOW,&options);
} int cgiMain(){ int fd;char a='1';cgiHeaderContentType(“text/htmlnn”);fprintf(cgiOut,“n”);fprintf(cgiOut,“
n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“
n”);fprintf(cgiOut,“n”);
fd=open(“/dev/ttyUSB0”,O_RDWR);if(-1==fd)
fprintf(cgiOut,“open usart failedn”);
}
zigbee_serial_init(fd);if(cgiFormSuccess==cgiFormSubmitClicked(“up”)){ a='2';write(fd,&a,1);} if(cgiFormSuccess==cgiFormSubmitClicked(“down”)){ a='1';write(fd,&a,1);} if(cgiFormSuccess==cgiFormSubmitClicked(“right”)){ a='4';write(fd,&a,1);} if(cgiFormSuccess==cgiFormSubmitClicked(“left”)){ a='3';write(fd,&a,1);} if(cgiFormSuccess==cgiFormSubmitClicked(“stop”)){ a='0';write(fd,&a,1);} fprintf(cgiOut,"
第二篇:單片機課程設計報告——智能數字頻率計
單片機原理課程設計報告
題目:智能數字頻率計設計
專業: 信息工程 班級:信息111 學號:*** 姓名:*** 指導教師:***
北京工商大學計算機與信息工程學院
1、設計目的
(1)了解和掌握一個完整的電子線路設計方法和概念;
(2)通過電子線路設計、仿真、安裝和調試,了解和掌握電子系統研發產品的一個基本流程。
(3)了解和掌握一些常見的單元電路設計方法和在電子系統中的應用: 包括放大器、濾波器、比較器、計數和顯示電路等。
(4)通過編寫設計文檔與報告,進一步提高學生撰寫科技文檔的能力。
2、設計要求
(1)基本要求
設計指標:
1.頻率測量:0~250KHz; 2.周期測量:4mS~10S; 3.閘門時間:0.1S,1S;
4.測量分辨率:5位/0.1S,6位/1S; 5.用圖形液晶顯示狀態、單位等。
充分利用單片機軟、硬件資源,在其控制和管理下,完成數據的采集、處理和顯示等工作,實現頻率、周期的等精度測量方案。在方案設計中,要充分估計各種誤差的影響,以獲得較高的測量精度。
(2)擴展要求
用語音裝置來實現頻率、周期報數。
(3)誤差測試
調試無誤后,可用數字示波器與其進行比對,記錄測量結果,進行誤差分析。
(4)實際完成的要求及效果
1.測量范圍:0.1Hz~4MHz,周期、頻率測量可調; 2.閘門時間:0.05s~10s可調; 3.測量分辨率:5位/0.01S,6位/0.1S; 4.用圖形液晶顯示狀態、單位(Hz/KHz/MHz)等。
3、硬件電路設計
(1)總體設計思路 本次設計的智能數字頻率計可測量矩形波、鋸齒波、三角波、方波等信號的頻率。系統共設計包括五大模塊: 主芯片控制模塊、整形模塊、分頻模塊、檔位選擇模塊、和顯示模塊。設計的總的思想是以AT89S52單片機為核心,將被測信號送到以LM324N為核心的過零比較器,被測信號轉化為方波信號,然后方波經過由74LS161構成的分頻模塊進行分頻,再由74LS153構成的四選一選擇電路控制檔位,各部分的控制信號以及頻率的測量主要由單片機計數及控制,最終將測得的信號頻率經LCD1602顯示。
各模塊作用如下: 1.主芯片控制模塊: 單片機AT89S52 內部具有2個16位定時/計數器T0、T1,定時/計數器的工作可以由編程來實現定時、計數和產生計數溢出時中斷要求的功能。利用單片機的計數器和定時器的功能對被測信號進行計數。以AT89S52 單片機為控制核心,來完成對各種被測信號的精確計數、顯示以及對分頻比的控制。利用其內部的定時/計數器完成待測信號周期/頻率的測量。
2.整形模塊:整形電路是將一些不是方波的待測信號轉化成方波信號,便于測量。本設計使用運放器LM324連接成過零比較器作為整形電路。
3.分頻模塊: 考慮單片機利用晶振計數,使用11.0592MHz 時鐘時,最大計數速率將近500 kHz,因此需要外部分頻。分頻電路用于擴展單片機頻率測量范圍,并實現單片機頻率測量使用統一信號,可使單片機測頻更易于實現,而且也降低了系統的測頻誤差。本設計使用的分頻芯片是74LS161實現4分頻及16分頻。
4.檔位選擇模塊:控制74LS161不分頻、4分頻 或者 16分頻,控制芯片是74LS153。5.顯示模塊:編寫相應的程序可以使單片機自動調節測量的量程,并把測出的頻率數據送到顯示電路顯示,本設計選用LCD1602。
(2)測頻基本設計原理
所謂“頻率”,就是周期性信號在單位時間(1s)內變化的次數。若在一定時間間隔T內測得這個周期性信號的重復變化次數N,則其頻率可表示為f=N/T(右圖3-1所示)。其中脈沖形成電路的作用是將被測信號變成脈沖信號,其重復頻率等于被測頻率fx。利用單片機的定時/計數T0、T1的定時、計數功能產生周期為1s的時間脈沖信號,則門控電路的輸出信號持 圖3-1 續時間亦準確地等于1s。閘門電路由標準的秒脈沖信號進行控制,當秒脈沖信號來到時,閘門開通,被測脈沖信號通過閘門送到計數譯碼顯示電路。秒脈沖信號結束時閘門關閉,計數器停止計數。由于計數器計得的脈沖數N是在1秒時間內的累計數,所以被測頻率fx=NHz。
(2)系統框圖
本智能數字頻率計系統框圖如圖3-2所示
圖3-2智能數字頻率計系統框圖
(3)單片機部分
P0口經上拉后做LCD數據接口 P2.1~P2.3作為LCD控制端口 P2.4~P2.5作為分頻選擇端口 P3.5作為被測信號輸入端口
P3.2~P3.4作為開關控制端口(對應電路圖中K1,K2,SET)
圖3-3 89D52單片機部分電路
(4)分頻部分
74HC161與74ls161功能兼容,是常用的四位二進制可預置的同步加法計數器,他可以靈活的運用在各種數字電路,以及單片機系統中實現分頻器等很多重要的功能。
其管腳圖如圖3-4所示:
圖3-4 74HC161 圖3-5 74HC153管腳圖
74HC153是一個雙4選1數據選擇器,其管腳圖如圖3-5所示:
74LS161對整形后的防波信號進行分頻,Q1為四分頻輸出,Q3為16分頻輸出。未經分頻、經過四分頻和經過16分頻的三路信號作為74LS153的一個4選1數據選擇器低三位輸入,由單片機控制選擇分頻數,然后再送單片機內部計數器T1(如圖3-6)。
圖3-6 分頻、選擇分頻檔位電路圖
(5)LCD顯示部分
LCD顯示,1602的八位數據I/O口與單片機的P0口相連,讀寫控制端接P2.0-P2.2口。三個按鍵中,設置鍵接P3.2單片機按外部中斷0接口,當按鍵按下后,置P3.2口低電平,單片機中斷。S1、S2為頻率/周期、閘門時間加/減選擇按鍵(如圖3-7)。
圖3-7 LCD顯示部分電路圖
4、軟件設計
(1)主程序流程圖設計
本次程序設計采用的是C語言程序設計,其設計流程圖4-1所示:
圖4-1主程序流程圖
(2)子程序流程圖設計
<1>顯示程序:
LCD顯示程序設計流程如圖4-2所示:
圖4-2顯示程序流程圖 <2>頻率測量程序框圖:
頻率測量程序的整體架構如圖4-3所示:
圖4-3頻率測量框架圖
(3)中斷服務流程圖
INT0中斷流程圖如圖4-4所示:
圖4-4INT0中斷流程圖
(4)程序代碼
#include
//頻率 float p;
//周期 float sj;
//閘門時間 char idata buff[20];char flag=0;
//頻率、周期選擇標志位
char xs=0;//設置閘門時間結束后是否顯示結果的標志位
unsigned char m=0,n=0,yichu=0,fenpin;
//m定時中斷次數 n計數中斷次數 yichu判斷是定時
//器還是計數器溢出
#define Key_Set P3 #define K1 0xf7
//11110111
P33 #define K2 0xef
//11101111
P34 #define NO_Set 0xff #define Freq 0 #define Peri 1
sbit B153=P2^4;sbit A153=P2^3;sbit P17=P3^4;sbit P16=P3^3;sbit P35=P3^5;sbit Set=P3^2;unsigned char LCD_Wait(void);void LCD_Write(bit style, unsigned char input);void LCD_SetDisplay(unsigned char DisplayMode);void LCD_SetInput(unsigned char InputMode);void LCD_Initial();void GotoXY(unsigned char x, unsigned char y);void Print(unsigned char *str);void C52_Initial();void Delay(unsigned int t);void display(float f);void cepin();void panduan();void timedisplay(float sj);void Time_Set1();void Time_Set2();void t0();void t1();
/*****模塊名稱 LCD1602顯示程序******/
/***********************端口定義 ***********************************/
sbit LcdRs= P2^0;sbit LcdRw= P2^1;sbit LcdEn= P2^2;sfr DBPort= 0x80;
//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數據端口 /************************內部等待函數********************************/
unsigned char LCD_Wait(void){
LcdRs=0;
//寄存器選擇輸入端 1:數據 0:指令
LcdRw=1;
_nop_();//RW:為0:寫狀態;為1:讀狀態;
LcdEn=1;
_nop_();
//使能輸入端,讀狀態,高電平有效;寫狀態,下降沿有效
LcdEn=0;
return DBPort;
} /**********************向LCD寫入命令或數據***************************/
#define LCD_COMMAND 0
// Command #define LCD_DATA 1
// Data #define LCD_CLEAR_SCREEN
0x01
// 清屏 #define LCD_HOMING
0x02
// 光標返回原點 void LCD_Write(bit style, unsigned char input){
LcdEn=0;
LcdRs=style;
LcdRw=0;
_nop_();
DBPort=input;
_nop_();//注意順序
LcdEn=1;
_nop_();//注意順序
LcdEn=0;
_nop_();
LCD_Wait();} /********************設置顯示模式*********************************/
#define LCD_SHOW
0x04
//顯示開 #define LCD_HIDE
0x00
//顯示關
#define LCD_CURSOR
0x02
//顯示光標
#define LCD_NO_CURSOR
0x00
//無光標
#define LCD_FLASH
0x01
//光標閃動 #define LCD_NO_FLASH
0x00
//光標不閃動 void LCD_SetDisplay(unsigned char DisplayMode){
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
} /*********************設置輸入模式***********************************/ #define LCD_AC_UP 0x02 #define LCD_AC_DOWN 0x00
// default #define LCD_MOVE 0x01
// 畫面可平移 #define LCD_NO_MOVE 0x00
//default void LCD_SetInput(unsigned char InputMode){
LCD_Write(LCD_COMMAND, 0x04|InputMode);} /******************初始化LCD**************************************/
void LCD_Initial(){
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38);
//8位數據端口,2行顯示,5*7點陣
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);
//開啟顯示, 無光標
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);
//清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);
//AC遞增, 畫面不動 }
/************************************************************************/ void GotoXY(unsigned char x, unsigned char y){ if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));} void Print(unsigned char *str){
while(*str!=' 主站蜘蛛池模板: 亚洲色成人一区二区三区小说| 狠狠97人人婷婷五月| 日本阿v片在线播放免费| 亚洲精品久久久无码大桥未久| 欧美午夜理伦三级在线观看| av一本久道久久综合久久鬼色| 无码帝国www无码专区色综合| 久久精品国产亚洲av高清漫画| 亚洲精品在看在线观看高清| 无码免费的毛片基地| 99久久99精品久久久久久| 免费无码一区二区三区a片百度| 国产美女在线精品免费观看| 久久强奷乱码老熟女网站| 草草浮力地址线路①屁屁影院| 久久精品国产视频在热| 久久18禁高潮出水呻吟娇喘| 久久久久久久综合狠狠综合| 欧美精品亚洲精品日韩专区一乛方| 日韩乱码人妻无码系列中文字幕| 伦伦影院午夜理论片| 丰满多毛的大隂户视频| 人人爽人人爽人人片av免费| 校园春色~综合网| 337p日本欧洲亚洲大胆人人| 日本边添边摸边做边爱边| 国产亚洲一区二区在线观看| 超清无码av最大网站| 午夜福利伦伦电影理论片在线观看| 亚洲精品久久一区二区三区四区| 一本色道久久综合亚州精品蜜桃| 日韩精品无码专区免费播放| 国产av人人夜夜澡人人爽| 精品国产午夜福利在线观看| 国产互换人妻xxxx69| 亚洲国产美女精品久久久久∴| 久久精品国产成人av| 男女猛烈xx00免费视频试看| 亚洲精品无码不卡在线播he| 综合成人亚洲网友偷自拍| 国产精品区一区第一页|