单片机例子43个,配套开发板(5)

2019-04-10 09:49

write_date(table2[a]); delay(40); } for(a=0;a<16;a++) { write_com(0x18); //左移 delay1(600); } while(1); }

32. 本程序为定时器的基本驱动示例,定时器工作于方式1。下载程序后,隔三秒钟,第一个发光二极管被点亮.

#include

#define uint unsigned int uint pp;

sbit led=P1^0;

void main() { TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。 TR0=1; //打开定时器 TH0=0Xff; //定时器设置,每隔100微秒发起一次中断。 TL0=0Xa4; ET0=1; //开定时器0中断 EA=1; //开总中断 while(1) { if(pp==30000) //时隔3s后,led被点亮。 led=0; } }

void time0() interrupt 1 { TH0=0Xff; TL0=0Xa4; pp++; }

33. 本程序提供一些常用定时器计时的具体参数。用的是定时器0工作于方式1。且只针对11.0592MHz的晶振。 #include

void InitTimer0(void) {

TMOD = 0x01;

TH0 = 0xFF; //延时100微秒 TL0 = 0xA4;

/******************************************************************* TH0 = 0xFC;//延时1ms,请在中断处理函数中,重新装入该数值。 TL0 = 0x6;

********************************************************************

TH0 = 0xDC;//延时10ms,请在中断处理函数中,重新装入该数值 TL0 = 0x00;

********************************************************************/ EA = 1; ET0 = 1; TR0 = 1; }

void main(void) {

InitTimer0(); }

void Timer0Interrupt(void) interrupt 1 {

TH0 = 0x0FF; //这只是100微秒所对应的参数,若为其他秒数,请 TL0 = 0x0A4; //在次更该相应参数,如上面所示。 }

34. 本程序为计数器的基本驱动示例,计数器工作于方式1。 对按键S2按下的次数进行计数,当计数记到3时,第一个发光二极管被点亮。 #include

#define uint unsigned int //uint pp;

sbit led=P1^0; sbit s2=P3^4;

void main() { TMOD=0x05; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。 TR0=1; //打开计数器 ET0=1; //开计数器0中断 EA=1; //开总中断 while(1) { if(TL0==3) //当计数为3时,led被点亮。当然,由于有按键抖动,故有时未按三下S2,灯已经亮了。 led=0; } } /*

void time0() interrupt 1 { pp++; } */

35. 本程序延时用定时器的方法产生相互间隔的一频率为1KH的方波与高电平信号。KH方波持续期间,会驱动蜂鸣器发出响声,高电平持续期间,蜂鸣器不会发出声音。这样,二者相互穿插的结果就产生了断断续续的“滴滴”声。 #include

#define uint unsigned int uint aa;

unsigned char pp; bit close;

sbit didi=P2^3;

void main() { TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。 TR0=1; //打开定时器 TH0=0xff;//计时器每隔100微秒(0.1ms)发起一次中断。 TL0=0x9c;//产生频率为1000HZ的声音信号。 ET0=1; //开定时器0中断 EA=1; //开总中断 while(1) {

if(pp==10) { pp=0; if(!close) didi=~didi; //频率为1KH的音频信号 aa++; } if(aa==200) { didi=1; close=1; //方波音频信号持续时间为200*10*100us=0.2s } if(aa==300) //滴滴声的周期为300*10*100us=0.3s { close=0; aa=0; } } }

void time0() interrupt 1 { TH0=0xff; TL0=0x9c; pp++; }

36.50秒计时

#include

#define uchar unsigned char

sbit dula=P2^6; sbit wela=P2^7;

unsigned char j,k,c1,c0,m,n=255; unsigned char pp; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(unsigned char i) {

for(j=i;j>0;j--)

for(k=125;k>0;k--);

}

void display(uchar a,uchar b) {

P0=table[a]; dula=1; dula=0;

P0=0xef; wela=1; wela=0; delay(5);

P0=table[b]; dula=1; dula=0;

P0=0xdf; wela=1; wela=0; delay(5); }

void main() { TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。 TR0=1; //打开定时器 TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。 TL0=(65536-46080)%6;//46080的来历,为50000*11.0592/12 ET0=1; //开定时器0中断 EA=1; //开总中断 while(1) { if(pp==20) { pp=0; m++; n--; P1=n;//闪烁灯 if(m==60) { m=0; //若到了60s,则归零 } } c0=m; //取出当前描述的个

位与十位 c1=m/10; display(c1,c0); //显示 } }

void time0() interrupt 1 {TH0=(65536-46080)/256; TL0=(65536-46080)%6; pp++; }

37.定时器产生方波 #include

#define uint unsigned int uint pp;

sbit pwm=P1^0;

void main() { TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。 TR0=1; //打开定时器 TH0=0Xff; //定时器设置,每隔100微秒发起一次中断。 TL0=0Xa4; ET0=1; //开定时器0中断 EA=1; //开总中断 while(1) { if(pp<=2) pwm=1; else pwm=0; if(pp==10) pp=0; } }

void time0() interrupt 1 { TH0=0Xff; TL0=0Xa4; pp++; }

38秒表

#include

#define uchar unsigned char

sbit dula=P2^6; sbit wela=P2^7; sbit beep=P2^3; sbit lcden=P3^4; sbit rs=P3^5;

unsigned char halt,j,k,a1,a0,b1,b0,c1,c0,s,f,m,n=255; unsigned int pp; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(unsigned char i) {

for(j=i;j>0;j--)

for(k=125;k>0;k--); }

void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1) {

dula=0;

P0=table[shi2]; dula=1; dula=0;

wela=0; P0=0xfe; wela=1; wela=0; delay(5);

P0=table[shi1]|0x80; dula=1; dula=0;

P0=0xfd; wela=1; wela=0; delay(5);

P0=table[fen2]; dula=1; dula=0;

P0=0xfb; wela=1; wela=0; delay(5);

P0=table[fen1]|0x80; dula=1; dula=0;

P0=0xf7; wela=1; wela=0; delay(5);

P0=table[miao2]; dula=1; dula=0;

P0=0xef; wela=1; wela=0; delay(5);

P0=table[miao1]; dula=1; dula=0;

P0=0xdf; wela=1; wela=0; delay(5); }

void keyscan() { if(lcden==0) delay(10); if(lcden==0) { halt=1; } if(rs==0) halt=0; }

void main()

{ TMOD=0x01; TR0=1; TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。 TL0=(65536-46080)%6;//46080的来历,为50000*11.0592/12 ET0=1; EA=1; while(1) { keyscan(); if(halt==0) { TR0=1; if(pp==20) { pp=0; m++; n--; P1=n;//闪烁灯 if(m==60) { m=0; f++; if(f==60) { f=0; s++; if(s==99) { s=0; } } } } a0=s; a1=s/10; b0=f; b1=f/10; c0=m; c1=m/10; display(a1,a0,b1,b0,c1,c0); } else TR0=0; display(a1,a0,b1,b0,c1,c0); } }

void time0() interrupt 1 {TH0=(65536-46080)/256; TL0=(65536-46080)%6; pp++; }

39. do while

#include

sbit beep=P2^3; sbit led=P1^0;

void delay(unsigned int i) //一个延时程序。 { unsigned int j; char k; for(j=i;j>0;j--) for(k=200;k>0;k--); }

void main() { char cishu; do //当程序执行到此处,先无条件执行循环体一次。 { beep=~beep; //每循环一次,beep与led所代表的管脚电平都会取反。 led=~led; //由于次数最大值为9,初值为0,故共取了十次反,故蜂鸣器会响五下,led会闪五次 cishu++; delay(5000); } while(cishu<10);//执行循环体的条件是cishu<10,若变量不满足该表达式,则跳过。 //注意while括弧后面有一分号。 while(1); }

41 数组

#include

unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别使某一位LED点亮的P1口电平分布数组。

void delay() { unsigned int p,q; for(p=100;p>0;p--) for(q=100;q>0;q--); }

void main() { char m; //每个变量在使用前,必须要加以声明。 while(1) //下面的代码无限循环,效果便是led一遍遍的闪烁。 { P1=table[m];//这就是数组的调用方法,m值为几,即调用数组第几个值(数组中数值的编号从0开始) m++;//改变此m值,便可调用到数组中不同的值。开始时m=0,调用到值0xfe。从而点亮第一个数码管。(HJ-3G上,为低电平点亮LED,高电平熄灭LED) if(m==7)//由于led只有八位,而m是从0开始取值的,故当m=7时,应将其归零。 m=0; delay(); }} 42.for

#include sbit beep=P2^3; sbit led=P1^0;

void delay(unsigned int i) //一个延时程序。 { unsigned int j; char k; for(j=i;j>0;j--) for(k=200;k>0;k--); }

void main() { char cishu; for(cishu=0;cishu<10;cishu++)//第一个表达式为给变量赋初值,第二个为判断标准 //若为真,则执行下面的指令,否则将跳过大括弧中的指令 //第三句为更改变量值的指令。 {

beep=~beep; //每执行一次,beep与led

所代表的管脚电平都会取反。 led=~led; //由于共取了十次反,故蜂鸣器会响五下,led会闪五次 delay(5000); } while(1); }

43.switch

#include sbit s2=P3^4; sbit s3=P3^5; sbit s4=P3^6; sbit s5=P3^7; void main() { char anjian; while(1) //无条件永远执行大循环 { if(!s2) //这些按键按下,就会使anjian变量赋以相应的值。 anjian=1; if(!s3) anjian=2; if(!s4) anjian=3; if(!s5) anjian=4; switch(anjian) //当按键的值为几,程序就跳转到case几执行指令,让然后跳出 {//这个大括弧一定不可少 case 1: P1=0X0F; break;//这个break也不可少 case 2: P1=0Xf0; break; case 3: P1=0X55; break; case 4: P1=0Xaa; break; default:P1=0X00; break;//这个为当anjian取值为其他值时的结果(注意关键字为default)。 } //又由于在刚定义变量anjian时,变量的值为初始值0,而0不属于上面的数值, //故此时default项即被选中,故刚开机时,为8个LED均亮。 }}


单片机例子43个,配套开发板(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:1、竣工文件编制范本

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: