單片機的c語言程序設計與應用答案
『壹』 急求《單片機c語言程序設計實訓100例——基於8051+Proteus模擬》第三部分綜合設計C語言源代碼
這本書一共5章節,你說第三部分指的哪裡?
第五章才是綜合設計部分啊,而且這部分有好多常式,也不知道你要哪部分?
第1章 8051單片機C語言程序設計概述 1
1.1 8051單片機引腳 1
1.2 數據與程序內存 5
1.3 特殊功能寄存器 6
1.4 外部中斷、定時器/計數器及串口應用 8
1.5 有符號與無符號數應用、數位分解、位操作 9
1.6 變數、存儲類型與存儲模式 11
1.7 關於C語言運算符的優先順序 13
1.8 字元編碼 15
1.9 數組、字元串與指針 16
1.10 流程式控制制 18
1.11 可重入函數和中斷函數 19
1.12 C語言在單片機系統開發中的優勢 20
第2章 Proteus操作基礎 21
2.1 Proteus操作界面簡介 21
2.2 模擬電路原理圖設計 22
2.3 元件選擇 25
2.4 調試模擬 29
2.5 Proteus與Vision 3的聯合調試 29
2.6 Proteus在8051單片機應用系統開發的優勢 30
第3章 基礎程序設計 32
3.1 閃爍的LED 32
3.2 雙向來回的流水燈 34
3.3 花樣流水燈 36
3.4 LED模擬交通燈 38
3.5 分立式數碼管循環顯示0~9 40
3.6 集成式數碼管動態掃描顯示 41
3.7 按鍵調節數碼管閃爍增減顯示 44
3.8 數碼管顯示4×4鍵盤矩陣按鍵 46
3.9 普通開關與撥碼開關應用 49
3.10 繼電器及雙向可控硅控制照明設備 51
3.11 INT0中斷計數 53
3.12 INT0及INT1中斷計數 55
3.13 TIMER0控制單只LED閃爍 58
3.14 TIMER0控制數碼管動態管顯示 62
3.15 TIMER0控制8×8LED點陣屏顯示數字 65
3.16 TIMER0控制門鈴聲音輸出 68
3.17 定時器控制交通指示燈 70
3.18 TIMER1控制音階演奏 72
3.19 TIMER0、TIMER1及TIMER2實現外部信號計數與顯示 75
3.20 TIMER0、TIMER1及INT0控制報警器與旋轉燈 77
3.21 按鍵控制定時器選播多段音樂 79
3.22 鍵控看門狗 82
3.23 雙機串口雙向通信 84
3.24 PC與單片機雙向通信 90
3.25 單片機內置EEPROM讀/寫測試 95
第4章 硬體應用 99
4.1 74HC138解碼器與反向緩沖器控制數碼管顯示 100
4.2 串入並出晶元74HC595控制數碼管顯示四位數字 103
4.3 用74HC164驅動多隻數碼管顯示 106
4.4 並串轉換器74HC165應用 110
4.5 用74HC148擴展中斷 112
4.6 串口發送數據到2片8×8點陣屏滾動顯示 115
4.7 數碼管BCD解碼驅動器CD4511與DM7447應用 117
4.8 62256RAM擴展內存 119
4.9 用8255實現介面擴展 121
4.10 可編程介面晶元8155應用 124
4.11 串列共陰顯示驅動器控制4+2+2集成式數碼管顯示 129
4.12 14段與16段數碼管演示 133
4.13 16鍵解碼晶元74C922應用 136
4.14 1602字元液晶工作於8位模式直接驅動顯示 139
4.15 1602液晶顯示DS1302實時時鍾 148
4.16 1602液晶屏工作於8位模式由74LS373控制顯示 153
4.17 1602液晶屏工作於4位模式實時顯示當前時間 155
4.18 1602液晶屏顯示DS12887實時時鍾 159
4.19 時鍾日歷晶元PCF8583應用 167
4.20 2×20串列字元液晶屏顯示 174
4.21 LGM12864液晶屏顯示程序 177
4.22 TG126410液晶屏串列模式顯示 184
4.23 Nokia7110液晶屏菜單控製程序 192
4.24 T6963C液晶屏圖文演示 199
4.25 ADC0832 A/D轉換與LCD顯示 211
4.26 用DAC0832生成鋸齒波 215
4.27 ADC0808 PWM實驗 217
4.28 ADC0809 A/D轉換與顯示 220
4.29 用DAC0808實現數字調壓 221
4.30 16位A/D轉換晶元LTC1864應用 223
4.31 I2C介面存儲器AT24C04讀/寫與顯示 225
4.32 I2C存儲器設計的中文硬體字型檔應用 233
4.33 I2C介面4通道A/D與單通道D/A轉換器PCF8591應用 237
4.34 I2C介面DS1621溫度感測器測試 241
4.35 用兼容I2C介面的MAX6953驅動4片5×7點陣顯示器 246
4.36 用I2C介面控制MAX6955驅動16段數碼管顯示 250
4.37 I2C介面數字電位器AD5242應用 254
4.38 SPI介面存儲器AT25F1024讀/寫與顯示 257
4.39 SPI介面溫度感測器TC72應用測試 264
4.40 溫度感測器LM35全量程應用測試 268
4.41 SHT75溫濕度感測器測試 272
4.42 直流電機正、反轉及PWM調速控制 278
4.43 正反轉可控的步進電機 281
4.44 ULN2803驅動點陣屏仿電梯數字滾動顯示 284
4.45 液晶顯示MPX4250壓力值 286
4.46 12864LCD顯示24C08保存的開機畫面 289
4.47 用M145026與M145027設計的無線收發系統 293
4.48 DS18B20溫度感測器測試 296
4.49 1-Wire式可定址開關DS2405應用測試 303
4.50 MMC存儲卡測試 307
第5章 綜合設計 316
5.1 帶日歷時鍾及溫度顯示的電子萬年歷 316
5.2 用8051+1601LCD設計的整型計算器 321
5.3 電子秤模擬設計 328
5.4 1602液晶屏顯示仿手機鍵盤按鍵字元 332
5.5 用24C04與1602液晶屏設計的簡易加密電子鎖 336
5.6 1-Wire匯流排器件ROM搜索與多點溫度監測 341
5.7 高模擬數碼管電子鍾設計 356
5.8 用DS1302與12864LCD設計的可調式中文電子日歷 360
5.9 用T6963C液晶屏設計的指針式電子鍾 366
5.10 T6963C液晶屏中文顯示溫度與時間 370
5.11 T6963C液晶屏曲線顯示ADC0832兩路A/D轉換結果 372
5.12 溫度控制直流電機轉速 374
5.13 用74LS595與74LS154設計的16×16點陣屏 377
5.14 用8255與74LS154設計的16×16點陣屏 379
5.15 紅外遙控收發模擬 381
5.16 GP2D12紅外測距感測器應用 388
5.17 三端可調正穩壓器LM317應用測試 395
5.18 數碼管顯示的K型熱電偶溫度計 399
5.19 交流電壓檢測與數字顯示模擬 403
5.20 用MCP3421與RTD-PT100設計的鉑電阻溫度計 407
5.21 可接收串口信息的帶中英文硬字型檔的80×16 LED點陣屏 414
5.22 模擬射擊訓練游戲 422
5.23 GPS模擬 427
5.24 溫室監控系統模擬 431
5.25 基於Modbus匯流排的數據採集與開關控制系統設計模擬 437
建議你到腳本之家網站去搜索一下看看有沒有這本書的電子檔。
『貳』 我要的是用51單片機的C編程,兩條分別是:1) 單個LED燈的亮或滅實驗,寫出源程序並編譯下載運行;謝謝你
#include<reg52.h>
#include<intrins.h>
unsigned char a;
void main()
{
int i, j;
a = 0xfe;
while(1) {
a = _crol_(a, 1);
P1 = a; //單個LED燈,接在P1的任意引腳
for(j = 100; j > 0; j--)
for(i = 1000; i > 0; i--);
}
}
『叄』 求一份單片機的C語言程序設計與應用 - 基於Proteus模擬 第二版 課後答案 (姜志海 趙艷雷),謝謝啦
這本書的作者都是我的老師啊,不過我這沒有這本書的答案啊,有問題可以問我,我可能可以幫到你。呵呵
『肆』 跪求同濟大學魏鴻磊單片機原理及應用(C語言編程)課後習題答案
#include<stdio.h>
#include<stdlib.h>
void swap(int*a,int*b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void select_sort(int A[],int n)
{
register int i,j,min,m;
for(i=0;i<n-1;i++)
{
min=i;//查找最小值
for(j=i+1;j<n;j++)
{
if(A[min]>A[j])
{
min=j;
}
}
if(min!=i)
{
swap(&A[min],&A[i]);
printf("第%d趟排序結果為:\n",i+1);
for(m=0;m<n;m++)
{
if(m>0)
{
printf("");
}
printf("%d",A[m]);
}
printf("\n");
}
}
}
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF) /* VS2013等版本中需使用scanf_s(),VC6.0中使用scanf() */
{
int i;
int*A=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf("%d",&A[i]);
}
select_sort(A,n);
printf("最終排序結果為:\n");
for(i=0;i<n;i++)
{
if(i>0){
printf("");
}
printf("%d",A[i]);
}
printf("\n");
}
return 0;
}
『伍』 設計個單片機c語言程序,設計任務 1. 用鍵盤開關控制兩種模式的選擇,分別是單計時模式和連續多個計時模式
這個可以嗎?肯定要改下
/*****************************************************/
//實驗六數碼管電子鍾
//by 阿朱 [email protected] 轉載請註明來源
//通電後,數碼管電子鍾一直處於秒錶狀態,蜂鳴5秒響一次,要求使用T0,T1中斷
//與一般的應用不同,本實驗在數碼管前面未使用解碼器
//思路:定時器中斷的使用:
//1、初始化
//注意:P0口的P0.4接蜂鳴
/*****************************************************/
/*****************************************************/
//數碼管數據 p2口,高電平有效
//數碼管控制p0.0~P0.3,低電平有效
//P0.4輸出,接蜂鳴器
//P1輸入,接矩陣鍵盤 矩陣鍵盤定義: P1.0-P1.3為列線,P1.4-P1.7為行線
/*****************************************************/
/*****************************************************/
//本節知識要點:
//中斷
/*****************************************************/
#include <AT89X52.H>
//宏定義
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int
/*****************************************************************************
* TH0和TL0是計數器0的高8位和低8位計數器,計算辦法:TL0=(65536-C)%256; *
* TH0=(65536-C)/256,其中C為所要計數的次數即多長時間產生一次中斷;TMOD是計數器*
* 工作模式選擇,0X01表示選用模式1,它有16位計數器,最大計數脈沖為65536,最長時 *
* 間為1ms*65536=65.536ms *
******************************************************************************/
#define V_TMOD 0x01 //工作方式1
#define V_TH0 0x3C //50ms延時常數 C=50000 //0XDC
#define V_TL0 0xB0 //50ms延時常數 C=50000 /0X58
//#define V_TH1 0xFF //5ms延時常數 C=5000 //0XDC
//#define V_TL1 0xFB //5ms延時常數 C=5000 /0X58
#define V_TH1 0xDC //1ms延時常數 C=1000 //0XDC
#define V_TL1 0x58 //1ms延時常數 C=1000 /0X58
#define MAXFUN 6 //功能切換,表示最多的功能狀態,
sbit k10=P1^0;
//sbit BEEP = P3^7; //蜂鳴器驅動線----------------請修改為sbit BEEP = P0^4;
uchar bee; //蜂鳴器01開關
uchar key; //鍵順序嗎
uchar fun=10; //功能狀態, <= MAXFUN
uchar it0=0,it1; //Timer0中斷計數
uchar text=0; //數字
//uchar text_ctrl[4]={0xFE,0xFD,0xFB,0xF7}; //位選通值, 11111110, 11111101, 11111011, 11110111
uchar text_ctrl[4]={0xE,0xD,0xB,0x7}; //位選通值, 00001110, 00001101, 00001011, 00000111
//uchar text_code[11]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,關顯示,數碼管碼表,高電平有效
//uchar text_code[17]= {0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};//數碼管代碼
uchar text_code[11]={ 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6,0xff};//0,1,2,3,4,5,6,7,8,9,關顯示,數碼管碼表,高電平有效
uchar text_index=0; //當前顯示第幾個
uchar dis_buf[4]; //顯示緩存
uchar refresh=0; //刷新否 T1蜂鳴
uchar min=0; //minutes
uchar sec=0; //scconds
uchar hour=0; //scconds
uchar onsetup=0;
uchar keydown0=0,keydown1=0;
uchar data PWM=0xFf ; //PWM值增加,則占空比減小,LED 燈漸暗。
/*****************************************************/
// 延時子程序
/*****************************************************/
void delay0(uchar x) //x*0.14MS
{
uchar i;
while(x--)
for (i = 0; i<13; i++) {}
}
/*****************************************************/
//T1蜂鳴
/*****************************************************/
void beepT1()
{
if(refresh >0 )
{
refresh++;
bee=!bee;
if(refresh>=30)
refresh = 0;
}
}
/*****************************************************/
//文字輸出
/*****************************************************/
void textout()
{
//P0 = 0xff; // 先關閉所有數碼管
P2 = dis_buf[text_index]; //傳入數字的碼
bee = bee<<4;
P0 = text_ctrl[text_index]|bee; //選擇位
//P0 = bee; //選擇位
text_index++; //下一位
if( text_index >=4 )
text_index = 0;
}
/*****************************************************/
//鍵掃描子程序
/*****************************************************/
void keyscan(void)
{
uchar temp;
key = -1; //不按鍵
P1=0x0F; //低四位輸入
delay0(12);
temp=P1; //讀P1口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==1)
key=0;
else if(temp==2)
key=1;
else if(temp==4)
key=2;
else if(temp==8)
key=3;
else
key=16;
P1=0xF0; //高四位輸入
delay0(12);
temp=P1; //讀P1口
temp=temp&0xF0;
temp=~((temp>>4)|0xF0);
if(temp==1)
key=key+0;
else if(temp==2)
key=key+4;
else if(temp==4)
key=key+8;
else if(temp==8)
key=key+12;
else
key=16;
if( key!= -1)
fun = key;
//key =0;
//dis_buf=text_code[key]; //查表得鍵值
}
/*****************************************************/
//判斷鍵是否按下
/*****************************************************/
int keydown(void)
{
P1=0xF0;
if(P1!=0xF0)
{
keyscan();
//delay0(250);
return 1;
//
//beep();
// while(P1!=0xF0); //等待鍵釋放
}
return 0;
}
/*****************************************************/
//設置顯示緩存
/*****************************************************/
void settext(uchar text0,uchar text1,uchar text2,uchar text3)
{
dis_buf[0]=text_code[text0];
dis_buf[1]=text_code[text1];
dis_buf[2]=text_code[text2];
dis_buf[3]=text_code[text3];
}
/*****************************************************/
//fun10
//秒錶 mm:ss
/*****************************************************/
void fun10()
{
it0++;
if( it0==20 ) //1s
{
it0=0;
sec++;
if(sec==60)
{
sec = 0;
min++;
if(min==60)
{
min =0;
}
}
refresh = 1;
dis_buf[1] = text_code[min%10];
dis_buf[0] = text_code[min/10];
dis_buf[3] = text_code[sec%10];
dis_buf[2] = text_code[sec/10];
}
}
/*****************************************************/
//fun11
//時鍾 hh:mm
/*****************************************************/
void fun11()
{
it0++;
if( it0==20 ) //1s
{
it0=0;
sec++;
if(sec==60)
{
sec = 0;
min++;
if(min==60)
{
min =0;
hour++;
if(hour==12)
{
hour =0;
}
//dis_buf[1] = text_code[hour%10];
//dis_buf[0] = text_code[hour/10];
}
refresh = 1;
}dis_buf[1] = text_code[hour%10];
dis_buf[0] = text_code[hour/10];
dis_buf[3] = text_code[min%10];
dis_buf[2] = text_code[min/10];
}
}
/*****************************************************/
//fun12
//倒計時
/*****************************************************/
void fun12()
{
it0++;
if( it0==20 ) //0.1s
{
it0=0;
sec--; //sec must >=1
if(sec==0)
{
sec = 60;
min--;
//dis_buf[1] = text_code[min%10];
//dis_buf[0] = text_code[min/10];
if(min==0)
{
min =60;
}
}
refresh = 1;
dis_buf[1] = text_code[min%10];
dis_buf[0] = text_code[min/10];
dis_buf[3] = text_code[sec%10];
dis_buf[2] = text_code[sec/10];
}
}
/*****************************************************/
//fun13
//設置時間:hh:mm
/*****************************************************/
void fun13()
{
onsetup =1;
sec=0;
min=0;
hour=0;
dis_buf[1] = text_code[min%10];
dis_buf[0] = text_code[min/10];
dis_buf[3] = text_code[sec%10];
dis_buf[2] = text_code[sec/10];
}
/*****************************************************/
//fun3
//設置時間:hh:mm
/*****************************************************/
void fun130()
{
if( keydown1!= keydown0)
{
keydown0 = keydown1;
if(keydown1==0 ) return;//按鍵彈起
if(onsetup==1)
hour = key*10;
else if(onsetup==2)
hour += key;
else if(onsetup==3)
min = key*10;
else if(onsetup==4)
min += key;
onsetup++;
dis_buf[1] = text_code[hour%10];
dis_buf[0] = text_code[hour/10];
dis_buf[3] = text_code[min%10];
dis_buf[2] = text_code[min/10];
}
}
/*****************************************************/
//fun14
//設置
/*****************************************************/
void fun14()
{
sec=0;
min=0;
hour=0;
}
/*****************************************************/
// 定時器0中斷服務程序, 用於數碼管的動態掃描
//T0定時器,50ms激發一次,間隔1秒執行一次輸出(需要20次)
/*****************************************************/
void timer0() interrupt 1
{
//TR1=0 ;
TH0=V_TH0; //1ms延時常數
TL0=V_TL0; //頻率調節
//TH1=PWM ;
//TR1=1 ;
keydown1 = keydown();
//if( keydown1!= keydown0)
{
if( fun <=9 )
fun130();
else
switch(fun)
{
case 10:fun10();break;
case 11:fun11();break;
case 12:fun12();break;
case 13:fun13();break;
case 14:fun14();break;
default:break;
}
}
}
/*****************************************************/
// 定時器1中斷服務程序, 用於數碼管的動態掃描
//T1定時器,5ms激發一次,間隔5ms執行一次輸出
/*****************************************************/
void timer1() interrupt 3
{
//TR1=0;
//TH1=PWM ;
//處理一行
TH1 = V_TH1;
TL1 = V_TL1;
it1++;
//if( it1==200 )
{
it1=0;
beepT1();
textout();
}
}
/*****************************************************/
//系統初始化
// 函數功能:對系統進行初始化,包括定時器初始化和變數初始化*/
/*****************************************************/
void init(void)
{
//變數初始化
bee=1;
P0 = 0xFF;
P2 = 0xFF;
text_index = 0;
dis_buf[0]=text_code[0];
dis_buf[1]=text_code[0];
dis_buf[2]=text_code[0];
dis_buf[3]=text_code[0];
//定時器初始化/
TMOD=V_TMOD;
TH0=V_TH0; //延時常數
TL0=V_TL0; //延時常數
TH1=PWM; //脈寬調節
TL1=0;
IE = 0x82;
ET0=1; //定時/計數器T0中斷允許
ET1=1; //定時/計數器T1中斷允許
TR0=1 ; //T0啟動
TR1=1 ; //T1啟動*/
}
/*****************************************************/
//主程序
//處理按鍵時加上了按鍵消抖
/*****************************************************/
void main(void)
{
init(); //系統初始化
while(1);
//連run()都沒了
}
/*****************************************************/
//蜂鳴
/*****************************************************
void beep()
{
uchar i,j;
for (i=0;i<100;i++)
{
for(j=20;j>7;j--)
{
delay0(j);
BEEP=!BEEP; //BEEP取反
}
}
BEEP=1; //關閉蜂鳴器
}
*/
『陸』 單片機的C語言應用程序設計的編輯推薦
《單片機的C語言應用程序設計》(第4版)的特點是取材於原文資料,總結實際教學和應用經驗,實例較多,實用性強。本書中C語言是針對8051特有結構描述的,這樣,即使無編程基礎的人,也可通過本書學習單片機的C編程。《單片機的C語言應用程序設計》(第4版)可作為高等院校相關專業、培訓班和全國大學生電子設計競賽的教材,也可作為從事單片機應用的技術人員的參考用書。
『柒』 單片機c語言編程
單片機C語言程序設計入門課程,說起來容易,說起來難。學習單片機C語言,首先要了解這兩個東西是什麼。單片機入門編程主要是學習C語言,其次是電路和編程語言。單片機C語言程序設計學習中必讀的模擬電、數字電、電路三本書,為接下來的學習做鋪墊。看書的目的是因為網上教程太多,容易出現偏差。其實只要能懂電路原理,就能開發單片機軟體。簡介單片機又稱單片微控制器,不是執行某種邏輯功能的晶元,而是將一個計算機系統集成到一個晶元中。相當於一台微型計算機,與計算機相比,單片機只是缺少I/O設備。綜上所述,晶元變成了電腦。它體積小、重量輕、價格低,為研究、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理和結構的最佳選擇。單片機已經廣泛應用於智能儀器、實時工業控制、通訊設備、導航系統、家用電器等領域。自20世紀90年代以來,單片機技術得到了發展。隨著時代的進步和科技的發展,這項技術的實際應用也越來越成熟,單片機被廣泛應用於各個領域。如今,人們越來越重視單片機在智能電子技術中的發展和應用,單片機的發展進入了一個新的時期。無論是自動測量的實踐,還是智能儀器的實踐,都可以看到單片機技術的身影。在當前的產業發展過程中,電子產業是一個新興的產業。在工業生產中,人們已經成功地應用了電子信息技術,將電子信息技術與單片機技術相結合,有效地提高了單片機的應用效果。作為計算機技術的一個分支,單片機技術在電子產品領域的應用豐富了電子產品的功能,為智能電子設備的開發和應用提供了新的途徑,實現了智能電子設備的創新和發展。以上內容參考:網路-單片機
你應該先學習C語言。你可以讀譚浩強和單片機的書,循序漸進。別擔心。基礎好,什麼都能說。
如果你沒學過微機原理,建議你先學完再買本上海馬超的書,一周就能看懂了~
不認同無意義的光。《C編程》確實創造了一時的輝煌,這種輝煌很可能會延續下去,但不代表就是最好的。這本書之所以流行,是因為當時沒有辦法學習C,這本書很好理解。但是現在這本書太落後了,甚至3版還在用老標准,現在大家普遍用C99標准。老標准不能用Dev C編譯而且好像提問者應該知道C的基礎,推薦《單片機C語言編程及實例》這本書。直接搜索就能找到PDF版本的下載。-馬克·提埃洛
看譚浩強老師的。清華大學出版的《飢餓》。
『捌』 單片機的c語言應用程序設計和c51程序設計有什麼區別
你這個問題不是很好
c51就屬於對單片機的c語言程序設計了,只不過是針對51系列單片機的c語言應用程序設計。
單片機的c語言應用程序設計就包括對各種單片機的c程序了,AVR,MSP430,PIC……
當然,你這個問題也有可能是摳字眼的問題,就是「應用程序設計」和「程序設計」的區別了,程序設計可以分為系統程序和應用程序的設計.
『玖』 單片機的C語言的內容簡介
本書是普通高等教育「十一五」國家級規劃教材。本書以標准C語言和MCS-51單片機為基礎,全面系統地介紹單片機的C語言程序設計與應用的基本問題,是一本重在應用、兼顧理論的實用教程。主要內容包括:單片機的C語言概述、C51語言程序設計基礎、單片機內部資源和外部擴展資源的C51語言編程、μVision2集成開發環境的使用、MCS-51系列單片機簡介等。本書包含大量單片機的C語言設計實例,並提供免費電子課件。
本書可作為高等學校電氣與電子信息專業和計算機專業的本專科教材,也可供從事單片機應用與產品開發工作的工程技術人員學習參考。
『拾』 單片機原理與應用及c51程序設計 第二版 課後習題答案 楊加國 謝維成編著
指導教師簽字
學生簽字
2009年3月15日
題目來源
指導教師推薦□v 自選□ 其它□
題目類別 基礎研究□ 應用研究□v 其它□
一、調研資料的准備
時鍾模塊主要是用於對時、分、秒、年、月、日和星期的計時。該模塊採用的晶元為DS12C887 時鍾晶元。此晶元集成度高,其外圍的電路設計非常的簡單,且其性能非常好,計時的准確性高。
DS12C887為雙列直插式封裝。其具體與單片機的連接如下所述:AD0~AD7雙向地址/數據復用線與單片機的P0口相聯,用於向單片機交換數據;AS 地址選通輸入腳與單片機的 ALE 相聯用於對地址鎖存,實現地址數據的復用;CS 片選線與單片機的 P2.6 相聯,用於選通時鍾晶元;DS 數據選通讀輸入引腳與單片機的讀選通引腳相聯,用於實現對晶元數據的讀控制;R/W 讀/寫輸入與單片機的寫選通引腳相聯,用於實現對時鍾晶元的寫控制;MOT 直接接地,選用 INTEL 時序。IRQ引腳與 8051 的 INT1 相連,用於為時間的採集提供時間基準。
二、選題依據
當前,在世界范圍內,一個以微電子技術,計算機和通信技術為先導的,以信息技術和信息產業為中心的信息革命方興未艾。為使我國盡快實現經濟信息化,趕上發達國家水平,必須加速發展我國的信息技術和信息產業。而計算機技術怎樣與實際應用更有效的結合並有效的發揮其作用是科學界最熱門的話題,也是當今計算機應用中空前活躍的領域。
三、選題目的
本次實驗的完成證明了單片機的儲存功能, 從另一個角度上,我們可以看到這種功能的發展前景。當前,時髦的儲存器比比皆是,我們的這個小小的設計也許在這些MP3,MD3面前算不了什麼, 但是如果我們能在這個領域發展到微型晶元的程度,我們也許可以領導一代儲存器的新潮流。
四、選題要求
五、進度安排
第一階段 2008年12月---2009年2月 資料准備階段
大量閱讀與該課題有關的資料及相關的論文,醞釀課題實施方案及相關措施
第二階段 2009年3月---2009年4月中旬 初稿寫作
根據開題報告及指導教師對課題內容、完成形式的要求得到相應的資料及結果。及時聽取導師的意見,完善方案措施;繼續開展研究;爭取有一定的成果並完成初稿接受檢查。
第三階段 2009年4月中旬
根據導師對初稿的評定結果進行改進,以利於論文的繼續進行。
第四階段 2009年4月下旬---2009年6月定稿
完成畢業論文的寫作並交導師評閱,根據導師提出的要求進行必要修改,進一步完善論文的攥寫
六、完成畢業論文所需條件
在指導教師的幫助下,通過仔細查閱書籍、期刊,進一步在互聯網上搜索學習與選題有關的專業知識,完成對相關知識的掌握。並適當進行調研及相關實驗等。
七、主要參考文獻
《單片機原理與介面技術》,余錫存主編,西安電子科技大學出版社,2001.7.
《MCS-51單片機原理與應用》,蔡美琴主編,高等教育出版社,1992.8.
《單片機原理與應用技術》,張友德、謝偉毅主編,機械工業出版社,2004.3.
單片機原理介面與應用》,黃遵熹主編,西北工業大學出版社,2002.5.
《單片機原理與應用》,劉華東主編,電子工業出版社,2003.8.
劉文濤.MCS-51單片機培訓教程(C51版).北京:電子工業出版社,2005.
《51系列單片機及C51程序設計》,王建校、楊建國主編,科學出版社,2002.4.
《單片機原理與應用》,朱月秀、濮陽檳、駱經備主編,科學出版社,2004.3.
《新編單片機原理與應用》,潘永雄主編,西安電子科技大學出版社,2003.2.
《單片機原理與應用》,孫俊逸主編,清華大學出版社,2006.2.
《單片機原理與應用》,李全利主編,清華大學出版社,2006.2.
《單片機原理及其介面技術》第二版,胡漢才主編,清華大學出版社,2004.2.
夏繼強. 單片機實驗與實踐教程. 北京:北京航空航天大學出版社, 2001.
楊將新,李華軍,劉東駿.單片機程序設計及應用.北京:電子工業出版社,2006.
謝維成,楊加國.單片機原理與應用及C51程序設計.北京:清華大學出版社,2006.
評委評語及其建議:
選題依據充分,意義、目的明確,調研資料准備豐富,進度安排合理;完成任務所需條件具備,可以進行論文的寫作。
評委簽字:
系(院、部)部蓋章:
2009 年 3月10-16 日