郭天祥单片机作业.docx_第1页
郭天祥单片机作业.docx_第2页
郭天祥单片机作业.docx_第3页
郭天祥单片机作业.docx_第4页
郭天祥单片机作业.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用位操作和总线操作两种方法完成以下题目1. 熟练建立KEIL工程2. 点亮第一个发光管.#includesbit D1=P10;void main()D1=0;#includevoid main ()P1=0xfe;2.8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。#include #include#define uint unsigned int#define uchar unsigned charsbit beep=P26;uchar temp;void delay();void main() temp=0xfe;while(1) P1=temp;temp=_crol_(temp,1);beep=0;delay();beep=1; void delay()uint x,y;for(x=500;x0;x-)for(y=110;y0;y-);3.8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。#include #include#define uint unsigned int#define uchar unsigned charsbit beep=P26;uchar temp;void delay();void main() while(1)uint i;temp=0xfe; for(i=1;i8;i+) beep=0;P1=temp;delay(); beep=1; temp=_crol_(temp,1); for(i=1;i0;x-)for(y=110;y0;y-);4,用8个发光管演示出8位二进制数累加过程。#include /52单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义void delay(uint z) /延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. /delay(500);大约延时500ms. uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void main() /主函数 uchar a; while(1) /大循环 a+; P1=a; delay(1000); 5.8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。#include#include#define uint unsigned int#define uchar unsigned charvoid delay(uint);uchar temp;void main() while(1) uint j; for(j=0;j2;j+) uint i;temp=0xfe;for(i=1;i8;i+) P1=temp; delay(200);temp=_crol_(temp,1);for(i=1;i8;i+) P1=temp;delay(200);temp=_cror_(temp,1);for(j=0;j0;i-)for(j=k;j0;j-);3. 间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。#include#include#define uint unsigned int#define uchar unsigned charuchar temp;void delay();void main()uint i,j;while(1)temp=0xfe;for(j=0;j8;j+)for(i=0;i8-j;i+)P1=temp;delay();temp=_crol_(temp,1);temp=_crol_(temp,j);P1=0xff;temp=temp0;i-)for(j=110;j0;j-);4. 间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。#include#include#define uint unsigned int#define uchar unsigned charvoid delay();uchar temp;void main() uint i; uint j; for(i=0;i3;i+) P1=0x55;delay();P1=0xaa;delay();for(i=0;i3;i+)temp=0xfe;for(j=0;j7;j+)P1=temp; delay();temp=_crol_(temp,1);for(j=0;j7;j+)P1=temp;delay();temp=_cror_(temp,1); for(i=0;i3;i+)P1=0x7e;delay();P1=0xbd;delay();P1=0xdb;delay();P1=0xe7;delay();for(i=0;i3;i+)P1=0xe7;delay();P1=0xdb;delay();P1=0xbd;delay();P1=0x7e;delay(); for(i=0;i0;x-)for(y=110;y0;y-);1、 利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz#include sbit D1=P10;#define uint unsigned int;#define uchar unsigned char;uint tt;void main() TMOD=0x10;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1);void exter() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;if(tt=20)tt=0;D1=D1;2、利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。#include#include#define uint unsigned int;#define uchar unsigned char;uchar tt,temp; temp=0xfe;void main() TMOD=0X10;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;TR1=1;ET1=1;while(1);void time1() interrupt 3TH1=(65536-50000)/256;TL1=(65536-50000)%256;tt+; if(tt=2) tt=0;if(tt1)P1=temp;elsetemp=_crol_(temp,1);P1=temp;2、 同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。 #include /52单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit beep=P26;uchar tt;uint fre,flag;void main() /主函数 fre=50000; beep=0; TMOD=0x11;/设置定时器0,定时器1为工作方式1 TH0=(65536-fre)/256; TL0=(65536-fre)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;/开总中断 ET0=1;/开定时器0中断 ET1=1; TR1=1; TR0=1;/启动定时器0 while(1);/等待中断产生 void timer0() interrupt 1 /定时器0中断 TR0=0; /进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失 TH0=(65536-fre)/256; TL0=(65536-fre)%256; tt+; if(flag=6&flag=12&flag=18&flag=24&flag=30&flag=36&flag=42&flag=48&flag54) tt=0; fre=156; beep=beep; TR0=1;void timer1() interrupt 3 TH1=(65536-50000)/256; TL1=(65536-50000)%256; flag+; if(flag=54) flag=0; fre=50000; 4、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3.C、D、E、F,重复。 #include #include#define uint unsigned int #define uchar unsigned char uint aa;uchar num;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;void main() P1=0xf0;P0=0xc0; TMOD=0X10; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET1=1; TR1=1; while(1); void timer0() interrupt 3 TH1=(65536-50000)/256; TL1=(65536-50000)%256; aa+; if(aa=10) aa=0;if(num=16)num=0; P0=tablenum; num+; 1. 利用动态扫描方法在六位数码管上显示出稳定的4321#include#include#define uint unsigned int #define uchar unsigned charuint num=0,tt=0,num1=0;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;uchar code table1= 0x0e,0x00d,0x0b,0x07 ;void main()TMOD=0X11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1) if(tt=1)tt=0; num+;P0=tablenum;if(num=4)num=0;P1=table1num1;num1+;if(num1=4)num1=0;void timer0() interrupt 1TH0=(65536-5000)/256;TL0=(65536-5000)%256;tt+;2. 用动态扫描方法和定时器1在数码管的前三位显示出秒表,精确到1%秒,即后两位显示1%秒,一直循环下去。#include#include#define uint unsigned int #define uchar unsigned charuint bai,shi,ge, tt,num,temp=0;void display(uint bai,uint shi,uint ge);void delay(uint);uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;uchar code table1= 0x0e,0x00d,0x0b,0x07 ;void main()TMOD=0X11;TH0=(65536-5000)/256;TL0=(65536-5000)%256;EA=1;ET0=1;TR0=1; while(1)if(tt=2)tt=0; bai=temp/100;shi=temp%100/10; ge=temp%10; display( bai, shi, ge);temp+; if(temp=9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论