教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

《单片机原理及应用(C51)》(3)

来源:网络收集 时间:2026-08-09
导读: #include \char led_mod[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71}; char count=0; sbit P04 = P0^4; int0_key() interrupt 0 { P04=!P04; } int1_key() interrupt 2

#include \char led_mod[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71}; char count=0; sbit P04 = P0^4; int0_key() interrupt 0 { P04=!P04; }

int1_key() interrupt 2 { count++;

if (count==0x10) count=0; P2 = led_mod[count]; }

void main(){

IT0=IT1=EX0=EX1=EA=1; P04=0;

P2 = led_mod[0]; while(1); }

4、数码管动态显示。要求:6个共阳数码管稳定显示“012345”6个字符。 #include

unsigned char led[]={0xc0,0xf9,0xa4,0x99,0x92}; void delay(unsigned char t) { unsigned char i,j; for(i=200;i>0;i--) for(j=t;j>0;j--); }

main()

{unsigned char i, w; while(1) { w=0x01;

for( i=0;i<6;i++) { P2=~w; w<<1; P1=led[i]; delay(100); } } }

5、采用T0定时方式2在P1.0口输出周期为0.5ms的方波(设fosc=12MHz)。 分析:计数初值TL0= ((256-250)*12/12)%6 = 0x06, TMOD = 0x02

11

(1)查询方式 (2)中断方式 #include #include sbit P1_0 = P1^0; sbit P1_0=P1^0; main() timer0 () interrupt 1 { TMOD = 0x02; { P1_0 = !P1_0; TH0= TL0 = 0x06; } TR0=1; main() for(;;) { TMOD = 0x02; { while(!TF0); TH0 = TL0 = 0x06; P1_0 =!P1_0; EA= ET0 = 1; TF0 = 0; TR0=1; } while(1); } }

6、设计0~9秒的简易秒表。(用T1,采用方式1编写1s延时函数,系统晶振12M。) #include unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay1s() { unsigned char i; for(i=0;i<0x14;i++) C2C1 { TH1=0x3c; 30PFX130PFU11939XTAL1P0.0/AD0 TL1=0xb0; 38P0.1/AD137P0.2/AD2CRYSTAL TR1=1; 1836XTAL2P0.3/AD335P0.4/AD4 while(!TF1); 34P0.5/AD5C333P0.6/AD6932 TF1=0; RSTP0.7/AD72110uFR1 } P2.0/A822P2.1/A92310k} P2.2/A102924R3PSENP2.3/A113025ALEP2.4/A12void main() 3126R4220EAP2.5/A1327P2.6/A14{ unsigned char i; 28R5220.P2.7/A15 TMOD=0x10; 110R6220P1.0P3.0/RXD211P1.1P3.1/TXD312 while(1) R7220P1.2P3.2/INT0413P1.3P3.3/INT1514 { for(i=0;i<10;i++) R8220P1.4P3.4/T0615P1.5P3.5/T1716R9220P1.6P3.6/WR { P0=led[i]; 817P1.7P3.7/RD220 delay1s(); AT89C51 } } }

7、通过按键改变灯的显示方式。要求正常情况是8个灯依次点亮,循环显示。按键按下后,8个灯同时亮灭一次,按键动作采用外部中断INT0实现。 #include

void delay(unsigned char t)

12

{ unsigned char i,j;

C1 for(i=200;i>0;i--) X1 for(j=t;j>0;j--); U1C2D1}

D2void int_0() interrupt 0 R10{ P1=0x00; D3C3 delay(250); D4R9 P1=0xff; U2:AD5 delay(250);

D6}

D7U2:Bvoid main()

D8{ unsigned k,w; EA=1;

R8R7R6R5R4R3R2R1 EX0=1; IT0=1; while(1) { w=0x01;

for(k=0;k<8;k++) { P1=~w; w<<=1; delay(100); } }}

8、定时中断方式实现键控的电子秒表:单片机控制2位数码管实现00~59的简易秒表,并利用3C1C2X1个独立按键实现秒表的启动、停止和复位功能。 R2-R7/1kU1#include /51头文件

unsigned char t=0; //定义中断次数 C3unsigned char second=0; //定义秒

R1unsigned char code table[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 启动//定时器0中断函数

暂停LED1timer0() interrupt 1{ 清零 TH0 =0x3c; //初值重装载 TL0 =0xb0; R16-R18/1K t++; //中断次数增1

if(t==20){ //若中断20次,相当于1秒 t=0; //中断次数计数器清零 second++; //秒计数器清零 }

if(second==60) second=0; //若秒计数器=60,清零 }

main(){

TMOD=0x01; //定义T0定时方式1

30pFCRYSTAL19XTAL130pF18XTAL2LED-RED9RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7393837363534333221222324252627281011121314151617LED-RED10kLED-RED29303122uFPSENALEEALED-REDP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A1510kLED-RED18161412Y0Y1Y2Y3A0A1A2A324681OELED-RED74LS24012345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDAT89C51LED-RED9753Y0Y1Y2Y3A0A1A2A31113151719LED-REDOE74LS2401k1k1k1k1k1k1k1k30pF30pF19XTAL1CRYSTAL18XTAL29RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7393837363534333221222324252627281011121314151617P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6PULLUP10uF10k293031PSENALEEAP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P2.0P2.1P2.2P2.3P2.4P2.5P2.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6P2.0P2.1P2.2P2.3P2.4P2.5P2.612345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDLED280C51 13

TH0 =0x3c; //50ms溢出初值 TL0 =0xb0;

ET0=1; //打开定时器0中断 EA=1; //打开总中断 while(1)

{ P0=table[second/10]; //P0口输出显示 P2=table[second]; //P2口输出显示 P1=P1&0x07; if(P1==0x06) TR0=1; if(P1==0x05) TR0=0; if(P1==0x03)

{ TR0=0; t=0; second=0; } } }

9、利用74LS164扩展并行输出口,并实现LED由上向下循环 。 #include sbit MR=P2^7;

void delay() { unsigned int i; for (i=0; i<20000; i++) ; }

void main() {

unsigned char index, LED; //定义LED指针和显示字模 SCON = 0; //设置串行模块工作在方式0

MR = 1; // CLEAR端=1,允许输入数据 while (1) { LED=0x7f; for (index=0; index < 8; index++) {

SBUF = LED; //控制L0灯点亮

do {} while(!TI); //通过TI查询判别数据是否输出结束 LED = ((LED>>1)|0x80); //左移1位,末位置1 TI=0; delay(); }

}}

14

10、根据如下电路,利用DAC0832编程实现两路锯齿波发生器的功能。 U1+5VU2Y1P2.01939120P0.0/AD0CSVCC3821 …… 此处隐藏:3273字,全部文档内容请下载后查看。喜欢就下载吧 ……

《单片机原理及应用(C51)》(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/454241.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)