单片机程序大全Word文件下载.docx

上传人:b****8 文档编号:21955732 上传时间:2023-02-01 格式:DOCX 页数:20 大小:18.85KB
下载 相关 举报
单片机程序大全Word文件下载.docx_第1页
第1页 / 共20页
单片机程序大全Word文件下载.docx_第2页
第2页 / 共20页
单片机程序大全Word文件下载.docx_第3页
第3页 / 共20页
单片机程序大全Word文件下载.docx_第4页
第4页 / 共20页
单片机程序大全Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

单片机程序大全Word文件下载.docx

《单片机程序大全Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机程序大全Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

单片机程序大全Word文件下载.docx

num=0;

}

while(!

K5);

//等待按键释放

P0=s8[num];

#defineucharunsignedchar//数据类型的宏定义

#defineuintunsignedint//数据类型的宏定义

unsignedcharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF};

//共阳数码管显示字型码数组10111111"

-"

ucharj;

{

j++);

//1ms基准延时程序

voiddisplay(unsignedchari)

{

P27=0;

//选通最有端的数码管显示

P0=table[i];

//显示i参数传来的字型码

}

voidmain(void)

unsignedchartemp;

display(16);

//初始显示"

while

(1)

P1=0xff;

//先向P1口写1;

端口读状态

P1=0xf0;

temp=P1;

if(temp!

=0xf0)

{

=0xf0)

P1=0xfe;

temp=P1;

switch(temp)

case(0xee):

display(0);

break;

case(0xde):

display

(1);

case(0xbe):

display

(2);

case(0x7e):

display(3);

P1=0xfd;

temp=P1;

case(0xed):

display(4);

case(0xdd):

display(5);

case(0xbd):

display(6);

case(0x7d):

display(7);

P1=0xfb;

case(0xeb):

display(8);

case(0xdb):

display(9);

case(0xbb):

display(10);

case(0x7b):

display(11);

P1=0xf7;

case(0xe7):

display(12);

case(0xd7):

display(13);

case(0xb7):

display(14);

case(0x77):

display(15);

/*行线接P1.0-P1.3,列线接P1.4-P1.7。

根据线反转法扫描键盘返回的键值编码查键值编码表,从而得到键值并送数码管显示。

开机时,数码管显示“-”。

*/

#include<

intrins.h>

ucharkey;

unsignedcharcodedisp_code[]={

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};

unsignedcharcodekey_code[]={

0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,

0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};

{;

voidbeep()//产生1KHZ频率声音的函数

/**********************************************************

键盘扫描子函数

**********************************************************/

ucharkeyscan()

ucharscan1,scan2,keycode,j;

P1=0xf0;

scan1=P1;

if((scan1&

0xf0)!

=0xf0)//判键是否按下

delay1ms(20);

//延时20ms

=0xf0)//二次判键是否按下

P1=0x0f;

//线反转法的核心

scan2=P1;

keycode=scan1|scan2;

//组合成键编码

=15;

j++)

if(keycode==key_code[j])//查表得键值

key=j;

return(key);

else

P1=0xff;

//P1口写1输入状态

return(16);

//"

main()

uchartt;

P0=0xbf;

P27=0;

//数码管显示"

P1=0xff;

while

(1)

if((P1&

=0xf0){

keyscan();

P0=disp_code[key];

for(tt=0;

tt<

200;

tt++)

delay1ms(200);

中断

#defineuintunsignedint

#defineucharunsignedchar

sbitdula=P2^6;

sbitwela=P2^7;

sbitd1=P1^0;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

voiddelay(uintz);

EA=1;

//开总中断

EX0=1;

//开外部中断0

//IT0=1;

//TCON=0x01;

wela=1;

//11101010

P0=0xea;

wela=0;

for(num=0;

num<

16;

num++)

{

d1=1;

dula=1;

P0=table[num];

dula=0;

delay(1000);

}

voiddelay(uintz)

uintx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

voidexter0()interrupt0

d1=0;

定时器

ucharaa,num;

aa=0;

//TMOD=0X00;

//设定定时器0为工作方式0

TMOD=0X01;

//设定定时器0为工作方式1

//TH0=(8192-5000)/32;

//TL0=(8192-5000)%32;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

ET0=1;

//开定时器0中断

TR0=1;

//启动定时器0

P0=0x24;

dula=1;

P0=0x3f;

dula=0;

if(aa==20)

{

aa=0;

num++;

if(num==10)

num=0;

dula=1;

P0=table[num];

dula=0;

}

}

voidtimer0()interrupt1

aa++;

中断控制LED

//用定时器T0的中断控制1位LED闪烁

reg51.h>

//包含51单片机寄存器定义的头文件

sbitD0=P0^0;

//将D0位定义为P0.0引脚

unsignedinti;

/**************************************************************

函数功能:

主函数

**************************************************************/

voidmain(void)

i=0;

//开总中断

//定时器T0中断允许

TMOD=0x01;

//使用定时器T0的模式1

//定时器T0的高8位赋初值

//启动定时器T0

while

(1);

//无限循环等待中断

定时器T0的中断服务程序

voidTime0(void)interrupt1using0//“interrupt”声明函数为中断服务函数

//其后的1为定时器T0的中断编号;

0表示使用第0组工作寄存器

i=i+1;

if(i==40){

D0=~D0;

//按位取反操作,将P0.0引脚输出电平取反

TH0=(65536-50000)/256;

//定时器T0的高8位重新赋初值

中断控制LED2

//包含52单片机寄存器定义的头文件

/*******************************************

******************************************/

//开放总中断

//允许使用外中断

IT0=1;

//选择负跳变来触发外中断

P0=0xff;

//关闭所有P0口的LED灯

//无限循环,

外中断T0的中断服务程序

voidit0(void)interrupt0using0//外中断0的中断编号为0

{P0=~P0;

//每产生一次中断请求,P0取反一次。

串口查询

unsignedchartmp;

voidsend_char(unsignedchartxd);

TMOD=0x20;

//定时器1工作于8位自动重载模式,用于产生波特率

TH1=TL1=0xFD;

//波特率9600

SCON=0x50;

//设定串行口工作方式1允许接收,相当于下面三句

//SM0=0;

//SM1=1;

//REN=1;

PCON=0x00;

//波特率不倍增

TR1=1;

//启动定时器1

if(RI==1)//是否有数据到来

RI=0;

tmp=SBUF;

//暂存接收到的数据

P0=tmp;

//数据传送到P0口

send_char(tmp);

//回传接收到的数据

voidsend_char(unsignedchartxd)

//传送一个字符

SBUF=txd;

TI);

//等特数据传送

TI=0;

//清除数据传送标志

串口通讯

ucharidatatrdata[]={'

R'

'

I'

C'

H'

M'

U'

Z'

-'

5'

1'

V'

2'

.'

0'

0x0d,0x0a,0x00};

sbitK1=P3^2;

//对应开发板K1按键

/*-------------------------------------------------------------*/

//串口初始化

voidUART_Init(void)

SCON=0x50;

//串口工作方式为1,串行允许接收

//SM0=0;

//SM1=1;

//REN=1;

TMOD=0x20;

//定时器1工作在方式2

//PCON=0x80;

//SMOD=1;

波特率加倍

TH1=0xfd;

//波特率9600bpsfosc="

11"

.0592MHz

TL1=0xfd;

ES=1;

//开串口中断

//允许定时器1工作

EA=1;

while(i--)

for(j=0;

;

}

//串口发送一个字节

voidUart_SendChar(unsignedchardat)

SBUF=dat;

//待发送的数据写入缓冲区

while(!

//等待发送完成

TI=0;

//清零发送标志位

//串口发送一个字符串

voidUart_SendString()

{uchar

while(trdata[i]!

=0x00)

SBUF=trdata[i];

while(!

TI=0;

i++;

//主函数

UART_Init();

//初始化串口

while

(1)

if(K1==0)

delay1ms(20);

Uart_SendString();

//发送数据

K1);

//等待按键释放

//串口接收中断函数

voidINT_UartRcv(void)interrupt4

unsignedcharRcv=0;

if(RI)//查询接收标志位(有数据发送过来时置为1)

RI=0;

//接收标志位清零

Rcv=SBUF;

//存储缓冲区的数据

P0=SBUF;

Uart_SendChar(Rcv);

//让从计算机上传到单片机的数据,传回的计算机显示

//用LED数码管显示计数器对T0的计数值

unsignedcharTab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//段码表

unsignedcharx;

sbitP34=P3^4;

voiddelay1ms(unsignedinti)

voidDisplay(unsignedcharx)

P2=0xdf;

//P2.6引脚输出低电平,DS6点亮

P0=Tab[x/100];

//显示十位

delay1ms(5);

P2=0xbf;

P0=Tab[x%100/10];

P2=0x7f;

//P2.7引脚输出低电平,DS7点亮

P0=Tab[x%10];

//显示个位

delay1ms(5);

P2=0xff;

TMOD=0x06;

//TMOD=00000110B,使用计数器T0的模式2

//允许定时器T0的中断

//允许外中断INT0

//INT0为下负脉冲触发方式

//启动T0

TH0=TL0=256-1;

//计数器T0高8位赋初值255

while

(1)//无限循环,不停地将TL0计数结果送P1口

//x=TL0;

Display(x);

//INT0终端函数

voidclear0()interrupt0

{x=0;

//T0计数器中断

voidKey_counter()interrupt1

if(P34==0){

x=(x+1)%1000;

//因为是3位数码管显示所以要把计的数控制在1000以内(000~999)

外中断字符查询

AT89X51.h>

ucharcodetrdata[]={'

0x0d,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1