单片机C语言程序设计实训例基于PROTEUS仿真.docx
- 文档编号:18372435
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:237
- 大小:2.29MB
单片机C语言程序设计实训例基于PROTEUS仿真.docx
《单片机C语言程序设计实训例基于PROTEUS仿真.docx》由会员分享,可在线阅读,更多相关《单片机C语言程序设计实训例基于PROTEUS仿真.docx(237页珍藏版)》请在冰点文库上搜索。
单片机C语言程序设计实训例基于PROTEUS仿真
《单片机C语言程序设计实训100例一基于8051+Proteus仿真》案例
第01篇基础程序设计
01闪烁的LED
/*名称:
闪烁的LED
说明:
LED按设定的时间间隔闪烁
*/
#include
#defineucharunsignedchar
#defineuintunsignedintsbitLED=P1A0;
//延时
voidDelayMS(uintx)
{
uchari;
while(x--)
{
for(i=0;i<120;i++);
}
}
//主程序
voidmain()
{
while
(1)
{
LED=~LED;
DelayMS(150);
}
}
ATB9C51
XTAL2
RST
P3E'J
ALEet
P1.0P1.1pis
Pl3
PI.4
PI.5PIE
PI.7
POinfAODPOl/ADI
PO3/A33
IPQ4/flrO斗
POWA35
FD6ZAD6P07f^7
FZD^B
P2.1M9
F2.2JA1D
P14JA12P2^W13
P2JJA15
P3.0rHKD
P.3ifT^D■i..iiTriT
F3.^ihrT
P3.4m]ps.anpt帥亟P3.7JRT
02从左到右的流水灯
/*名称:
从左到右的流水灯
说明:
接在P0口的8个LED
从左到右循环依次点亮,产生走
马灯效果
*/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//延时
I—IX1
c_I_'4
C1
-
LI
土土土土
KTALJ強1
PO
苗M址0PO钳D*
PU已1>4助地E
RzCy^r
P2T血
P2LJAi:
啡H
p;L'AIi
4
P2 MM-PltJANpjjjar PIQ 怦”应 PI1 巴XT江 Pi2 fSZWTi pid P33CT4TI Pi1 門1矶 W5 Ml£41 PI'■: rn、•m PI『 MTff- ±45 亠圭JI兰 voidDelayMS(uintx) { uchari; while(x--) {for(i=0;i<120;i++); } } //主程序 voidmain() { P0=0xfe; while (1) { P0=_crol_(P0,1);〃P0的值向左循环移动DelayMS(150); } } 038只LED左右来回点亮 /*名称: 8只LED左右来回点亮 说明: 程序利用循环移位函数_crol_和_cror_形成来回滚动的效果 */ 丄亍=1 卄即C2卄即 #include 冲T^LT PD21AECPDJiMJ: 恥怒 PDEIAD&PQ昨世 ns> F2JWIIG 卜? jMiir P3丁皿■'口 pit pii met wI PI3 円」tm PI4 PI5 PifJTr PIi 町的 Pi> U1 -I-I 三兰兰4二兰1±1,一 3 #include #defineucharunsignedchar #defineuintunsignedint //延时 voidDelayMS(uintx) { uchari; while(x--) {for(i=0;i<120;i++); } } //主程序 voidmain() { uchari; P2=0x01; while (1) for(i=0;i<7;i++) { P2=_crol_(P2,1);〃P2的值向左循环移动 DelayMS(150); } for(i=0;i<7;i++) { P2=_cror_(P2,1);〃P2的值向右循环移动 DelayMS(150); } } } 04花样流水灯 /*名称: 花样流水灯 说明: 16只LED分两组 按预设的多种花样变换显示 */ #include #defineucharunsignedchar #defineuintunsignedintucharcodePattern_P0[]={ -I- FTOW1 F.心F31>A1DPSIJML11昭舅id甩&41Si阳3.1* 旳3町niffrp F33IM1I F3i.ni 宀" 3D 亠一 —2_/ - t> PV'IAM旳丨岬 KHMun KiMeS 亦昨 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff }; ucharcodePattern_P2[]= { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff }; //延时 voidDelayMS(uintx) { uchari; while(x--) {for(i=0;i<120;i++); } } //主程序 voidmain() { uchari; while (1) P0禾口P2口显示 {〃从数组中读取数据送至 for(i=0;i<136;i++) { PO=Pattern_PO[i];P2=Pattern_P2[i];DelayMS(IOO); } PC3.UU: Z- K> vsr nTAKT 吃 吟T P2L跻叩 rap* Fl□ P3MK: > *11l *12 冲茧匹二 屮 討4 *1I 枷删 戸1? 05LED模拟交通灯 ±±±± } /*名称: LED模拟交通灯 说明: 东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南 北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。 */ #include #defineucharunsignedchar #defineuintunsignedint sbitRED_A=P0A0;〃东西向灯 sbitYELLOW_A=POA1; sbitGREEN_A=P0A2; sbitRED_B=P0A3;〃南北向灯 sbitYELLOW_B=P0A4; sbitGREEN_B=P0A5; ucharFlash_Count=0,Operation_Type=1;〃闪烁次数,操作类型变量 //延时 voidDelayMS(uintx) uchari; while(x--)for(i=0;i<120;i++); } //交通灯切换 voidTraffic_Light() { switch(Operation_Type) { case1: //东西向绿灯与南北向红灯亮 RED_A=1;YELLOW_A=1;GREEN_A=0; RED_B=0;YELLOW_B=1;GREEN_B=1; DelayMS(2000); Operation_Type=2; break; case2: //东西向黄灯闪烁,绿灯关闭 DelayMS(300); YELLOW_A=~YELLOW_A;GREEN_A=1; if(++Flash_Count! =10)return;//闪烁5次 Flash_Count=0; Operation_Type=3; break; case3: //东西向红灯,南北向绿灯亮 RED_A=0;YELLOW_A=1;GREEN_A=1; RED_B=1;YELLOW_B=1;GREEN_B=0; DelayMS(2000); Operation_Type=4; break; case4: //南北向黄灯闪烁5次 DelayMS(300); YELLOW_B=~YELLOW_B;GREEN_B=1; if(++Flash_Count! =10)return; Flash_Count=0; Operation_Type=1; } } //主程序 voidmain() { while (1)Traffic_Light(); } 06单只数码管循环显示0~9 0~9循环显示 /*名称: 单只数码管循环显示0~9说明: 主程序中的循环语句反复将0~9的段码送至P0口,使数字*/ #include #include ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //延时 voidDelayMS(uintx) { uchart; while(x--)for(t=0;t<120;t++); } //主程序 voidmain() { uchari=0; P0=0x00; while (1) {/*for(;i<11;i++){PO=~DSY_CODE[i];DelayMS(300);}//注: 另一方案*/ -.RP1-. IO HI— 卜一 C3rig LI.d... in# .亠 — fffTALI KilMXPOSIAM RST FOJUMMIFOSSES闻钿oePC和0 匚訶 吃.•歼卄 4LE 孕 卫钠」叭Oflnci P1.1 pi.-umcn PlJ pszryfn PlJ 附simh P1.4 P3.4HTi Pli fjsiti Pl3 P1.7 巧: 起" PHI m PO=~DSY_CODE[i];i=(i+1)%10; DelayMS(300); } } 078只数码管滚动显示单个数字 /*名称: 8只数码管滚动显示单个数字说明: 数码管从左到右依次滚动显示 0~7,程序通过每次仅循环选通一只数码管 */ #include #include #defineucharunsignedchar #defineuintunsignedintucharcodeDSY_CODE[]={OxcO,Oxf9,Oxa4,OxbO,Ox99,Ox92,Ox82,Oxf8,Ox8O,Ox9O}; //延时voidDelayMS(uintx) { uchart; while(x--)for(t=0;t<120;t++); } //主程序 voidmain() uchari,wei=0x80; while (1) { for(i=0;i<8;i++) { P2=0xff;//关闭显示wei=_crol_(wei,1); P0=DSY_CODE[i];//发送数字段码 P2=wei;//发送位码 DelayMS(300); } } } 088只数码管动态显示多个不同字符 电路如上图 /*名称: 8只数码管动态显示多个不同字符说明: 数码管动态扫描显示0~7。 */ #include #include #defineucharunsignedchar #defineuintunsignedint ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//延时 voidDelayMS(uintx) { uchart; while(x--)for(t=0;t<120;t++); } //主程序 voidmain() { uchari,wei=0x80; while (1) { for(i=0;i<8;i++) { P2=0xff; P0=DSY_CODE[i];//发送段码wei=_crol_(wei,1); P2=wei;//发送位码 DelayMS (2); 098只数码管闪烁显示数字串 电路如上图 /*名称: 8只数码管闪烁显示数字串说明: 数码管闪烁显示由0~7构成的一串数字本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。 */ #include #defineucharunsignedchar #defineuintunsignedint //段码表 ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//位码表 ucharcodeDSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //延时 voidDelayMS(uintx) { uchart;while(x--)for(t=0;t<120;t++); } //主程序 voidmain() { uchari,j;while (1){for(i=0;i<30;i++){for(j=0;j<8;j++){P0=0xff;P0=DSY_CODE[j];//发送段码P2=DSY_IDX[j];//发送位码 DelayMS (2); } }P2=0x00;//关闭所有数码管并延时DelayMS(1000); } } 108只数码管滚动显示数字串电路如上图 /*名称: 8只数码管滚动显示数字串说明: 数码管向左滚动显示3个字符构成的数字串 */ #include #include #defineucharunsignedchar #defineuintunsignedint //段码表 ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //下面数组看作环形队列,显示从某个数开始的8个数(10表示黑屏) ucharNum[]={10,10,10,10,10,10,10,10,2,9,8}; //延时 voidDelayMS(uintx) { uchart; while(x--)for(t=0;t<120;t++); } //主程序 voidmain() { uchari,j,k=0,m=0x80; while (1) {//刷新若干次,保持一段时间的稳定显示 for(i=0;i<15;i++) { for(j=0;j<8;j++) {//发送段码,采用环形取法,从第k个开始取第j个 P0=0xff; P0=DSY_CODE[Num[(k+j)%11]]; m=_crol_(m,1); P2=m;//发送位码 DelayMS (2); } } k=(k+1)%11;//环形队列首支针k递增,Num下标范围0~10,故对11取余} } 11K1-K4控制LED移位 /*名称: K1-K4控制LED移位 说明: 按下K1时,P0口LED上移一位; 按下K2时,P0口LED下移一位; 按下K3时,P2口LED上移一位; 按下K4时,P2口LED下移一位; */ #include #include #defineucharunsignedchar #defineuintunsignedint //延时 voidDelayMS(uintx) { uchari; while(x--) for(i=0;i<120;i++); } //根据P1口的按键移动 LED voidMove_LED() { 卜 -DJ L上務 LT© C1• IF •U1 KiiUADCi ■^TAL3 叩1曲E R04XCZ4 RS 120'48 叨皿 空 PHO 鬥•时B P1: 1 RIJiTXp MJ Pt3 FUikni FiiJ P15 owl pi Pl? ・gT阿6, SI b* 24 > 2E • 常 2fi 、 A if((P1&0x10)==0)P0=_cror_(P0,1);〃K1 elseif((P1&0x20)==0)P0=_crol_(P0,1);〃K2 elseif((P1&0x40)==0)P2=_cror_(P2,1);〃K3 elseif((P1&0x80)==0)P2=_crol_(P2,1);〃K4 } //主程序 voidmain() { ucharRecent_Key;//最近按键 P0=0xfe; P2=0xfe; P1=0xff; Recent_Key=0xff; while (1) { if(Recent_Key! =P1) { //保存最近按键 Recent_Key=P1; Move_LED(); DelayMS(10); } } 12K1-K4按键状态显示/*名称: K1-K4按键状态显示 说明: K1、K2按下时LED点亮,松开时熄灭, K3、K4按下并释放时LED点亮,再次按下并释放时熄灭; */ #include #defineucharunsignedchar #defineuintunsignedintsbitLED1=P0A0; sbitLED2=P0A1; sbitLED3=P0A2; sbitLED4=P0A3; sbitK仁P1A0; sbitK2=P1A1; sbitK3=P1A2; sbitK4=P"3; //延时 voidDelayMS(uintx) { uchari; while(x--)for(i=0;i<120;i++); } //主程序 voidmain() { P0=0xff; P仁Oxff; while (1) { LED1=K1; LED2=K2; if(K3==0) {while(K3==0);LED3=~LED3; } if(K4==0) { while(K4==0);LED4=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言程序设计 实训例 基于 PROTEUS 仿真
![提示](https://static.bingdoc.com/images/bang_tan.gif)