㈠ 如何編寫驅動程序
代碼:
#include<linux/mole.h>
#include<linux/kernel.h>
#include<asm/io.h>
#include<linux/miscdevice.h>
#include<linux/fs.h>
#include<asm/uaccess.h>
//流水燈代碼
#define GPM4CON 0x110002e0
#define GPM4DAT 0x110002e4
static unsigned long*ledcon=NULL;
static unsigned long*leddat=NULL;
//自定義write文件操作(不自定義的話,內核有默認的一套文件操作函數)
static ssize_t test_write(struct file*filp,const char __user*buff,size_t count,loff_t*offset)
{
int value=0;
int ret=0;
ret=_from_user(&value,buff,4);
//底層驅動只定義基本操作動作,不定義功能
if(value==1)
{
*leddat|=0x0f;
*leddat&=0xfe;
}
if(value==2)
{
*leddat|=0x0f;
*leddat&=0xfd;
}
if(value==3)
{
*leddat|=0x0f;
*leddat&=0xfb;
}
if(value==4)
{
*leddat|=0x0f;
*leddat&=0xf7;
}
return 0;
}
//文件操作結構體初始化
static struct file_operations g_tfops={
.owner=THIS_MODULE,
.write=test_write,
};
//雜設備信息結構體初始化
static struct miscdevice g_tmisc={
.minor=MISC_DYNAMIC_MINOR,
.name="test_led",
.fops=&g_tfops,
};
//驅動入口函數雜設備初始化
static int __init test_misc_init(void)
{
//IO地址空間映射到內核的虛擬地址空間
ledcon=ioremap(GPM4CON,4);
leddat=ioremap(GPM4DAT,4);
//初始化led
*ledcon&=0xffff0000;
*ledcon|=0x00001111;
*leddat|=0x0f;
//雜設備注冊函數
misc_register(&g_tmisc);
return 0;
}
//驅動出口函數
static void __exit test_misc_exit(void)
{
//釋放地址映射
iounmap(ledcon);
iounmap(leddat);
}
//指定模塊的出入口函數
mole_init(test_misc_init);
mole_exit(test_misc_exit);
MODULE_LICENSE("GPL");
(1)驅動程序c語言源代碼案例擴展閱讀:
include用法:
#include命令預處理命令的一種,預處理命令可以將別的源代碼內容插入到所指定的位置;可以標識出只有在特定條件下才會被編譯的某一段程序代碼;可以定義類似標識符功能的宏,在編譯時,預處理器會用別的文本取代該宏。
插入頭文件的內容
#include命令告訴預處理器將指定頭文件的內容插入到預處理器命令的相應位置。有兩種方式可以指定插入頭文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含標准庫頭文件或者實現版本所提供的頭文件,應該使用第一種格式。如下例所示:
#include<math.h>//一些數學函數的原型,以及相關的類型和宏
如果需要包含針對程序所開發的源文件,則應該使用第二種格式。
採用#include命令所插入的文件,通常文件擴展名是.h,文件包括函數原型、宏定義和類型定義。只要使用#include命令,這些定義就可被任何源文件使用。如下例所示:
#include"myproject.h"//用在當前項目中的函數原型、類型定義和宏
你可以在#include命令中使用宏。如果使用宏,該宏的取代結果必須確保生成正確的#include命令。例1展示了這樣的#include命令。
【例1】在#include命令中的宏
#ifdef _DEBUG_
#define MY_HEADER"myProject_dbg.h"
#else
#define MY_HEADER"myProject.h"
#endif
#include MY_HEADER
當上述程序代碼進入預處理時,如果_DEBUG_宏已被定義,那麼預處理器會插入myProject_dbg.h的內容;如果還沒定義,則插入myProject.h的內容。
㈡ 求C語言的FM62429驅動程序
<p>你看哪裡需要積分下載的,CSDN和PUDN,網路文庫我都可以幫你下。</p>
<p>驅動程序的話應該不會很難,看文檔來寫就可以了。</p>
<p>
</p>
<p>附件里的程序包括以下內容:</p>
<p>1,M62429的控製程序。</p>
<p>2,STC12C5410AD的AD初始化與讀取程序</p>
<p>3,串口程序。</p>
<p>
</p>
<p>這個程序是把3路AD的數據讀出,然後通過串口控制62429。</p>
㈢ 步進電機驅動程序C語言
步進電機控製程序(c語言+51單片機)
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ms *77
// f = 12 M
#define LEDLen 4
#define Dj_star() {IE=0x81; pri_dj=0; }
#define Dj_stop() {IE=0x00; pri_dj=1; P1=0xff; shache="0"; delay(800ms); delay(800ms);delay(400ms); shache = 1; }
#define Chilun_Num 8
/* 齒輪數 8 個*/
#define set_display_num() { LEDBuf[0] = tmp / 1000; LEDBuf[1] = tmp / 100 % 10; \
LEDBuf[2] = tmp / 10 % 10; LEDBuf[3] = tmp % 10; }
uchar LEDBuf[LEDLen] = {0,0,0,0};
void read_num (); /* 讀播碼盤 到 set_round_num * 8 */
void display ();
void delay(uint delay_time) { uint i; for (i=0; i < delay_time ; i++) ; }
void run ();
void fx_run();
uint round_num = 0; /* 記錄已轉的 齒輪數 , 中斷1次 加 1*/
uint set_round_num = 0; /* 播碼盤設置 圈數 */
uint set_pwm_width = 0; /* 播碼盤設置 步進電機 正向速度 */
bit one_round_flg = 0;
sbit led_1000 = P0^7; //use for display
sbit led_100 = P0^6; //use for display
sbit led_10 = P0^5; //use for display
sbit led_1 = P0^4; //use for display
sbit key_start = P3^0;
sbit key_puse = P3^0;
sbit key_clear = P3^1;
/* P3^2 接齒輪感測器 中斷 */
sbit bujin_zx_stop = P3^3; /* 接步進電機 ,正向到位感測器 ,為 0 停機 */
sbit bujin_fx_stop = P3^4; /* 接步進電機 ,反向到位感測器 ,為 0 停機 */
sbit shache = P3^5; /* 接剎車控制繼電器 0 電位有效 */
sbit pri_dj = P3^6; /* 接主電機控制繼電器 0 電位有效 */
void main(){
TCON = 0x01;
display();
while(1) {
IE="0x00";
round_num = 0;
display();
if ( bujin_fx_stop ) fx_run();
while ( key_start );
delay ( 8ms );
if(!key_start){
read_num();
//set_round_num = 8;
while ( !key_start );
run ();
fx_run();
}
}
}
void run () {
#define Delay_time 180
/* 轉一圈 50 次循環,每循環 4 步 ,50 * 4 = 200 , 200 * 1。8 = 360 */
uchar i ;
P1 = 0xff;
set_pwm_width = 15 + set_pwm_width / 10;
while ( 1 ) {
while( !shache | !key_start );
Dj_star();
for ( i="0" ; bujin_zx_stop & !pri_dj;i++ ){
P1 = 0xf9;
delay ( Delay_time ); // bujin_zx_stop = P3^3;
P1 = 0xfc; // bujin_fx_stop = P3^4;
delay ( Delay_time); // key_puse = P3^0;
P1 = 0xf6; // key_clear = P3^1;
delay ( Delay_time ); // shache = P3^5;
P1 = 0xf3; // pri_dj = P3^6;
delay ( Delay_time );
if( i == set_pwm_width ) { P1 = 0xff; i = 0; one_round_flg = 0; while ( !one_round_flg & key_puse );}
if(!key_puse) { delay(4ms); if(!key_puse) break; }
}
P1 = 0xff;
if ( pri_dj ) break;
if ( !key_puse ) {
delay ( 8ms );
if ( !key_puse ) {
Dj_stop();
while ( !key_puse );
// next pree key
while( !shache );
while(1){
while ( key_puse & key_clear );
delay ( 8ms );
if ( !key_clear ) { round_num = 0; display(); }
if ( !key_puse ) break;
}
while( !key_puse );
delay(8ms);
while( !key_puse );
}
}
}
}
void ext_int0(void) interrupt 0 { /* 主電機 齒輪 中斷 */
uint tmp;
EA = 0;
if( !pri_dj ){
round_num ++;
if (round_num % Chilun_Num == 0 ){
one_round_flg = 1;
tmp = round_num / Chilun_Num ;
set_display_num();
P0 = 0xf0;
P0 = P0 | LEDBuf[0] ;
led_1000 = 0;
P0 |= 0xf0;
P0 = 0xf0;
P0 = P0 | LEDBuf[1] ;
led_100 = 0;
P0 |= 0xf0;
P0 = 0xf0;
P0 = P0 | LEDBuf[2] ;
led_10 = 0;
P0 |= 0xf0;
P0 = 0xf0;
P0 = P0 | LEDBuf[3] ;
led_1 = 0;
P0 |= 0xf0;
P0 = 0xf0;
}
if ( round_num >= set_round_num ) Dj_stop();
}
EA = 0x81;
}
void display(){
uchar i;
uint tmp = 0;
tmp = round_num / Chilun_Num ;
set_display_num();
for(i = 0; i < LEDLen ; i ++){
P0 = 0xf0;
P0 = P0 | LEDBuf[i] ;
if(i==0) led_1000 = 0; //P0^4
if(i==1) led_100 = 0; //P0^5
if(i==2) led_10 = 0; //P0^6
if(i==3) led_1 = 0; //P0^7
P0 |= 0xf0;
}
P0 = 0xf0;
}
void read_num(){
/* 讀播碼盤 到 set_round_num ,set_pwm_width */
uchar tmp;
P2 = 0xFF;
P2 = 0xEF; // 1110 1111
delay ( 1ms );
tmp = ~(P2 | 0xF0);
P2 = 0xDF; // 1101 1111
delay ( 1ms );
tmp = (~(P2 | 0xF0 )) * 10 + tmp;
set_round_num = tmp;
P2 = 0xBF; // 1011 1111
delay ( 1ms );
tmp = (~(P2 | 0xF0));
P2 = 0x7F; // 0111 1111
delay ( 1ms );
tmp = (~(P2 | 0xF0)) * 10 + tmp;
set_round_num = set_round_num + tmp * 100;
set_round_num = set_round_num * Chilun_Num;
P2 = 0xFF;
P1 = 0xbF; // 0111 1111
delay ( 1ms );
tmp = ~(P2 | 0xF0) ;
P1 = 0xFF;
P2 = 0xFF;
P1 &= 0x7F; // 1011 1111
delay ( 1ms );
tmp = (~(P2 | 0xF0)) * 10 + tmp ;
set_pwm_width = tmp ;
P1 = 0xFF;
P2 = 0xFF;
}
void fx_run(){
#define f_Delay_time 180
while ( bujin_fx_stop ) { /* 反向 回車 直到 感測器 動作*/
P1 = 0xf3; //0011
delay ( f_Delay_time );
P1 = 0xf6; //0110
delay ( f_Delay_time );
P1 = 0xfc; //1100
delay ( f_Delay_time );
P1 = 0xf9; //1001
delay ( f_Delay_time );
}
P1 = 0xff;
}
㈣ 急求《單片機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
建議你到腳本之家網站去搜索一下看看有沒有這本書的電子檔。
㈤ 經典C語言程序例子
題目01:在一個已知的字元串中查找最長單詞,假定字元串中只含字母和空格,空格用來分隔不同的單詞。
(5)驅動程序c語言源代碼案例擴展閱讀:
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
㈥ c語言編程實例
【程序1】
題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?
1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去
掉不滿足條件的排列。
2.程序源代碼:
main()
{
int i,j,k;
printf(「\n「);
for(i=1;i〈5;i++)/*以下為三重循環*/
for(j=1;j〈5;j++)
for (k=1;k〈5;k++)
{
if (i!=k&&i!=j&&j!=k) /*確保i、j、k三位互不相同*/
printf(「%d,%d,%d\n「,i,j,k);
}
}
==============================================================
【程序2】
題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高
於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提
成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於
40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於
100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
1.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。
2.程序源代碼:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf(「%ld「,&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
if(i〈=100000)
bonus=i*0.1;
else if(i〈=200000)
bonus=bonus1+(i-100000)*0.075;
else if(i〈=400000)
bonus=bonus2+(i-200000)*0.05;
else if(i〈=600000)
bonus=bonus4+(i-400000)*0.03;
else if(i〈=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf(「bonus=%d「,bonus);
}
==============================================================
【程序3】
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後
的結果滿足如下條件,即是結果。請看具體分析:
2.程序源代碼:
#include 「math.h「
main()
{
long int i,x,y,z;
for (i=1;i〈100000;i++)
{ x=sqrt(i+100); /*x為加上100後開方後的結果*/
y=sqrt(i+268); /*y為再加上168後開方後的結果*/
if(x*x==i+100&&y*y==i+268)/*如果一個數的平方根的平方等於該數,這說明此數是完全平方數*/
printf(「\n%ld\n「,i);
}
}
==============================================================
【程序4】
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊
情況,閏年且輸入月份大於3時需考慮多加一天。
2.程序源代碼:
main()
{
int day,month,year,sum,leap;
printf(「\nplease input year,month,day\n「);
scanf(「%d,%d,%d「,&year,&month,&day);
switch(month)/*先計算某月以前月份的總天數*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf(「data error「);break;
}
sum=sum+day; /*再加上某天的天數*/
if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/
leap=1;
else
leap=0;
if(leap==1&&month〉2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf(「It is the %dth day.「,sum);}
==============================================================
【程序5】
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x〉y則將x與y的值進行交換,
然後再用x與z進行比較,如果x〉z則將x與z的值進行交換,這樣能使x最小。
2.程序源代碼:
main()
{
int x,y,z,t;
scanf(「%d%d%d「,&x,&y,&z);
if (x〉y)
{t=x;x=y;y=t;} /*交換x,y的值*/
if(x〉z)
{t=z;z=x;x=t;}/*交換x,z的值*/
if(y〉z)
{t=y;y=z;z=t;}/*交換z,y的值*/
printf(「small to big: %d %d %d\n「,x,y,z);
}
==============================================================
【程序6】
題目:用*號輸出字母C的圖案。
1.程序分析:可先用』*』號在紙上寫出字母C,再分行輸出。
2.程序源代碼:
#include 「stdio.h「
main()
{
printf(「Hello C-world!\n「);
printf(「 ****\n「);
printf(「 *\n「);
printf(「 * \n「);
printf(「 ****\n「);
}
==============================================================
【程序7】
題目:輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful!
1.程序分析:字元共有256個。不同字元,圖形不一樣。
2.程序源代碼:
#include 「stdio.h「
main()
{
char a=176,b=219;
printf(「%c%c%c%c%c\n「,b,a,a,a,b);
printf(「%c%c%c%c%c\n「,a,b,a,b,a);
printf(「%c%c%c%c%c\n「,a,a,b,a,a);
printf(「%c%c%c%c%c\n「,a,b,a,b,a);
printf(「%c%c%c%c%c\n「,b,a,a,a,b);}
==============================================================
【程序8】
題目:輸出9*9口訣。
1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。
2.程序源代碼:
#include 「stdio.h「
main()
{
int i,j,result;
printf(「\n「);
for (i=1;i〈10;i++)
{ for(j=1;j〈10;j++)
{
result=i*j;
printf(「%d*%d=%-3d「,i,j,result);/*-3d表示左對齊,佔3位*/
}
printf(「\n「);/*每一行後換行*/
}
}
==============================================================
【程序9】
題目:要求輸出國際象棋棋盤。
1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格。
2.程序源代碼:
#include 「stdio.h「
main()
{
int i,j;
for(i=0;i〈8;i++)
{
for(j=0;j〈8;j++)
if((i+j)%2==0)
printf(「%c%c「,219,219);
else
printf(「 「);
printf(「\n「);
}
}
==============================================================
【程序10】
題目:列印樓梯,同時在樓梯上方列印兩個笑臉。
1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數。
2.程序源代碼:
#include 「stdio.h「
main()
{
int i,j;
printf(「\1\1\n「);/*輸出兩個笑臉*/
for(i=1;i〈11;i++)
{
for(j=1;j〈=i;j++)
printf(「%c%c「,219,219);
printf(「\n「);
}
}
【程序11】
題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月
後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
1.程序分析:兔子的規律為數列1,1,2,3,5,8,13,21....
2.程序源代碼:
main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i〈=20;i++)
{ printf(「%12ld %12ld「,f1,f2);
if(i%2==0) printf(「\n「);/*控制輸出,每行四個*/
f1=f1+f2; /*前兩個月加起來賦值給第三個月*/
f2=f1+f2; /*前兩個月加起來賦值給第三個月*/
}
}
==============================================================
【程序12】
題目:判斷101-200之間有多少個素數,並輸出所有素數。
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數。
2.程序源代碼:
#include 「math.h「
main()
{
int m,i,k,h=0,leap=1;
printf(「\n「);
for(m=101;m〈=200;m++)
{ k=sqrt(m+1);
for(i=2;i〈=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap) {printf(「%-4d「,m);h++;<br>if(h%10==0)<br>printf(「\n「);<br> }
leap=1;
}
printf(「\nThe total is %d「,h);
}
==============================================================
【程序13】
題目:列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數
本身。例如:153是一個「水仙花數」,因為153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。
2.程序源代碼:
main()
{
int i,j,k,n;
printf(「』water flower』number is:「);
for(n=100;n〈1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出個位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf(「%-5d「,n);
}
}
printf(「\n「);
}
==============================================================
【程序14】
題目:將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。程序分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:
(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。
(2)如果n〈〉k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n,
重復執行第一步。
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。2.程序源代碼:
/* zheng int is divided yinshu*/
main()
{
int n,i;
printf(「\nplease input a number:\n「);
scanf(「%d「,&n);
printf(「%d=「,n);
for(i=2;i〈=n;i++)
{
while(n!=i)
{
if(n%i==0)
{ printf(「%d*「,i);
n=n/i;
}
else
break;
}
}
printf(「%d「,n);}
==============================================================
【程序15】
題目:利用條件運算符的嵌套來完成此題:學習成績〉=90分的同學用A表示,60-89分之間的用B表示,
60分以下的用C表示。
1.程序分析:(a〉b)?a:b這是條件運算符的基本例子。
2.程序源代碼:
main()
{
int score;
char grade;
printf(「please input a score\n「);
scanf(「%d「,&score);
grade=score〉=90?』A』:(score〉=60?』B』:』C』);
printf(「%d belongs to %c「,score,grade);
}
==============================================================
【程序16】
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
1.程序分析:利用輾除法。2.程序源代碼:
main()
{
int a,b,num1,num2,temp;
printf(「please input two numbers:\n「);
scanf(「%d,%d「,&num1,&num2);
if(num1 { temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*利用輾除法,直到b為0為止*/
{
temp=a%b;
a=b;
b=temp;
}
printf(「gongyueshu:%d\n「,a);
printf(「gongbeishu:%d\n「,num1*num2/a);
}
==============================================================
【程序17】
題目:輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。
1.程序分析:利用while語句,條件為輸入的字元不為』\n』.
2.程序源代碼:
#include 「stdio.h「
main()
{char c;<br>int letters=0,space=0,digit=0,others=0;<br>printf(「please input some characters\n「);<br>while((c=getchar())!=』\n』)<br>{<br>if(c〉=』a』&&c〈=』z』||c〉=』A』&&c〈=』Z』)<br>letters++;<br>else if(c==』 』)<br>space++;<br>else if(c〉=』0』&&c〈=』9』)<br>digit++;<br>else<br>others++;<br>}
printf(「all in all:char=%d space=%d digit=%d others=%d\n「,letters,
space,digit,others);
}
==============================================================
【程序18】
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時
共有5個數相加),幾個數相加有鍵盤控制。
1.程序分析:關鍵是計算出每一項的值。
2.程序源代碼:
main()
{
int a,n,count=1;
long int sn=0,tn=0;
printf(「please input a and n\n「);
scanf(「%d,%d「,&a,&n);
printf(「a=%d,n=%d\n「,a,n);
while(count〈=n)
{
tn=tn+a;
sn=sn+tn;
a=a*10;
++count;
}
printf(「a+aa+...=%ld\n「,sn);
}
==============================================================
【程序19】
題目:一個數如果恰好等於它的因子之和,這個數就稱為「完數」。例如6=1+2+3.編程
找出1000以內的所有完數。
1. 程序分析:請參照程序〈--上頁程序14.
2.程序源代碼:
main()
{
static int k[10];
int i,j,n,s;
for(j=2;j〈1000;j++)
{
n=-1;
s=j;
for(i=1;i {
if((j%i)==0)
{n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf(「%d is a wanshu「,j);
for(i=0;i printf(「%d,「,k);
printf(「%d\n「,k[n]);
}
}
}
==============================================================
【程序20】
題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在
第10次落地時,共經過多少米?第10次反彈多高?
1.程序分析:見下面注釋
2.程序源代碼:
main()
{
float sn=100.0,hn=sn/2;
int n;
for(n=2;n〈=10;n++)
{
sn=sn+2*hn;/*第n次落地時共經過的米數*/
hn=hn/2; /*第n次反跳高度*/
}
printf(「the total of road is %f\n「,sn);
printf(「the tenth is %f meter\n「,hn);
}
㈦ 《單片機C語言程序設計實訓100例——基於8051+Proteus模擬》 第03篇源代碼
單片機c語言編程100個實例目錄1
函數的使用和熟悉
實例3:用單片機控制第一個燈亮
實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率
實例5:將 P1口狀態分別送入P0、P2、P3口:認識I/O口的引腳功能
實例6:使用P3口流水點亮8位LED
實例7:通過對P3口地址的操作流水點亮8位LED
實例8:用不同數據類型控制燈閃爍時間
實例9:用P0口、P1 口分別顯示加法和減法運算結果
實例10:用P0、P1口顯示乘法運算結果
實例11:用P1、P0口顯示除法運算結果
實例12:用自增運算控制P0口8位LED流水花樣
實例13:用P0口顯示邏輯"與"運算結果
實例14:用P0口顯示條件運算結果
實例15:用P0口顯示按位"異或"運算結果
實例16:用P0顯示左移運算結果
實例17:"萬能邏輯電路"實驗
實例18:用右移運算流水點亮P1口8位LED
實例19:用if語句控制P0口8位LED的流水方向
實例20:用swtich語句的控制P0口8位LED的點亮狀態
實例21:用for語句控制蜂鳴器鳴笛次數
實例22:用while語句控制LED
實例23:用do-while語句控制P0口8位LED流水點亮
實例24:用字元型數組控制P0口8位LED流水點亮
實例25: 用P0口顯示字元串常量
實例26:用P0 口顯示指針運算結果
實例27:用指針數組控制P0口8位LED流水點亮
實例28:用數組的指針控制P0 口8 位LED流水點亮
實例29:用P0 、P1口顯示整型函數返回值
實例30:用有參函數控制P0口8位LED流水速度
實例31:用數組作函數參數控制流水花樣
實例32:用指針作函數參數控制P0口8位LED流水點亮
實例33:用函數型指針控制P1口燈花樣
實例34:用指針數組作為函數的參數顯示多個字元串
單片機c語言編程100個實例目錄2
實例35:字元函數ctype.h應用舉例
實例36:內部函數intrins.h應用舉例
實例37:標准函數stdlib.h應用舉例
實例38:字元串函數string.h應用舉例
實例39:宏定義應用舉例2
實例40:宏定義應用舉例2
實例41:宏定義應用舉例3
* 中斷、定時器中斷、定時器 *中斷、定時器*中斷、定時器 /
實例42:用定時器T0查詢方式P2口8位控制LED閃爍
實例43:用定時器T1查詢方式控制單片機發出1KHz音頻
實例44:將計數器T0計數的結果送P1口8位LED顯示
實例45:用定時器T0的中斷控制1位LED閃爍
實例46:用定時器T0的中斷實現長時間定時
實例47:用定時器T1中斷控制兩個LED以不同周期閃爍
實例48:用計數器T1的中斷控制蜂鳴器發出1KHz音頻
實例49:用定時器T0的中斷實現"渴望"主題曲的播放
實例50-1:輸出50個矩形脈沖
實例50-2:計數器T0統計外部脈沖數
實例51-2:定時器T0的模式2測量正脈沖寬度
實例52:用定時器T0控制輸出高低寬度不同的矩形波
實例53:用外中斷0的中斷方式進行數據採集
實例54-1:輸出負脈寬為200微秒的方波
實例54-2:測量負脈沖寬度
實例55:方式0控制流水燈循環點亮
實例56-1:數據發送程序
實例56-2:數據接收程序
實例57-1:數據發送程序
實例57-2:數據接收程序
實例58:單片機向PC發送數據
實例59:單片機接收PC發出的數據
*數碼管顯示*數碼管顯示 數碼管顯示數碼管顯示*/
實例60:用LED數碼顯示數字5
實例61:用LED數碼顯示器循環顯示數字0~9
實例62:用數碼管慢速動態掃描顯示數字"1234"
實例63:用LED數碼顯示器偽靜態顯示數字1234
實例64:用數碼管顯示動態檢測結果
實例65:數碼秒錶設計
實例66:數碼時鍾設計
實例67:用LED數碼管顯示計數器T0的計數值
實例68:靜態顯示數字「59」
單片機c語言編程100個實例目錄3
鍵盤控制*鍵盤控制* *鍵盤控制 *鍵盤控制 */
實例69:無軟體消抖的獨立式鍵盤輸入實驗
實例70:軟體消抖的獨立式鍵盤輸入實驗
實例71:CPU控制的獨立式鍵盤掃描實驗
實例72:定時器中斷控制的獨立式鍵盤掃描實驗
實例73:獨立式鍵盤控制的4級變速流水燈
實例74:獨立式鍵盤的按鍵功能擴展:"以一當四"
實例75:獨立式鍵盤調時的數碼時鍾實驗
實例76:獨立式鍵盤控制步進電機實驗
實例77:矩陣式鍵盤按鍵值的數碼管顯示實驗
//實例78:矩陣式鍵盤按鍵音
實例79:簡易電子琴
實例80:矩陣式鍵盤實現的電子密碼鎖
液晶顯示LCD*液晶顯示LCD *液晶顯示LCD * *液晶顯示LCD*液晶顯示LCD *液晶顯示LCD */
實例81:用LCD顯示字元'A'
實例82:用LCD循環右移顯示"Welcome to China"
實例83:用LCD顯示適時檢測結果
實例84:液晶時鍾設計
*一些晶元的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 紅外遙控/
實例85:將數據"0x0f"寫入AT24C02再讀出送P1口顯示
實例86:將按鍵次數寫入AT24C02,再讀出並用1602LCD顯示
實例87:對I2C匯流排上掛接多個AT24C02的讀寫操作
實例88:基於AT24C02的多機通信 讀取程序
實例89:基於AT24C02的多機通信 寫入程序
實例90:DS18B20溫度檢測及其液晶顯示
實例91:將數據"0xaa"寫入X5045再讀出送P1口顯示
實例92:將流水燈控制碼寫入X5045並讀出送P1口顯示
實例93:對SPI匯流排上掛接多個X5045的讀寫操作
實例94:基於ADC0832的數字電壓表
實例95:用DAC0832產生鋸齒波電壓
實例96:用P1口顯示紅外遙控器的按鍵值
實例97:用紅外遙控器控制繼電器
實例98:基於DS1302的日歷時鍾
實例99:單片機數據發送程序
實例100:電機轉速表設計
模擬霍爾脈沖
http://www.dzkfw.com.cn/myxin/51c_language.chm 單片機c語言一百例子
㈧ 編寫驅動程序用c語言還是匯編語言還是控制硬體要在c中混編匯編可以給出一個例子的代碼嗎謝謝。
會匯編當然最好
硬體控制可以直接用C語言
#include <stdio.h>
extern void swi_handler(void);
/*中斷處理子程序*/
void do_swi(int num)
{
/*
switch (num)
{
case 0x1: ...
case 0x2: ...
}
*/
printf("%d helloworld\n", num);
}
//swi_handler
void install_swi_handler(void (*fun)(void))
{
unsigned int cmd;
//1.構造一條跳轉指令
*((unsigned int *)0x38) = (unsigned int)fun;
cmd = 0xe59ff028;
//2.把此指令機器碼放到0x8地址
*((unsigned int *)0x8) = cmd;
}
int main(void)
{
int i = 0;
install_swi_handler(swi_handler);
for (i = 0; i < 10; i++) {
if (i == 3) {
__asm
{
swi 0x123
}
}
else
printf("aa\n");
}
return 0;
}
㈨ 下面一段c語言代碼驅動小車實現三路循跡,停車5秒,壁障,尋光,但是下載到單片機中,驅動小車存在問題。
三個問題:
1. 你的flag沒有初始化。
2. while(flag!=1){}中的代碼有些問題。有幾處應加上{ },給你改了一下:
while(flag!=1)
{
if(a5==0)
qianjin();
else
{ if(a4==0)
zuozhuan();
else
{ if(a6==0)
youzhuan();
else
flag=1;
}
}
}
3. 為什麼不在最外層設置大循環?
㈩ 求列印機驅動C語言源程序
請到富士通官方主頁下載,下載地址如下,去冬分OKI5320模擬和LQ1600K模擬2種http://www.fujitsu.com.cn/support/printer.htm