单片机程序大全

  • 格式:doc
  • 大小:22.00 KB
  • 文档页数:9

独立按键

#include<>

#define uchar unsigned char

#define uint unsigned int

sbit P27=P2^7;

sbit K5=P1^4;

sbit fmq=P3^6;

uchar num;

unsigned char code

s8[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void delay1ms(uint i)

{uchar j;

while(i--)

{for(j=0;j<115;j++) ,'0',0x0d,0x0a,0x00};

sbit K1=P3^2; 592MHz

TL1 = 0xfd;

ES = 1; //开串口中断

TR1 = 1; //允许定时器1工作

EA = 1; //开总中断

}

void delay1ms(uint i) {

uchar j;

while(i--)

{

for(j=0;j<115;j++) //1ms基准延时程序

{

;

}

}

}

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

//串口发送一个字节

void Uart_SendChar(unsigned char dat)

{

SBUF = dat; //待发送的数据写入缓冲区

while(!TI); //等待发送完成

TI = 0; //清零发送标志位

}

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

//串口发送一个字符串

void Uart_SendString()

{ uchar i=0;

while(trdata[i]!=0x00)

{

SBUF=trdata[i];

while(!TI);

TI=0;

i++;

}

}

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

//主函数

void main(void)

{

UART_Init(); //初始化串口

while(1)

{

if(K1==0)

{

delay1ms(20);

if(K1==0)

{

Uart_SendString(); //发送数据 while(!K1); //等待按键释放

}

}

}

}

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

//串口接收中断函数

void INT_UartRcv(void) interrupt 4

{

unsigned char Rcv = 0;

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

{

RI = 0; //接收标志位清零

Rcv = SBUF; //存储缓冲区的数据

P0=SBUF;

Uart_SendChar(Rcv); //让从计算机上传到单片机的数据 , 传回的计算机显示

}

}

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

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

unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码表

unsigned char x;

sbit P34=P3^4;

void delay1ms(unsigned int i)

{

unsigned char j;

while(i--)

{

for(j=0;j<115;j++) //1ms基准延时程序

{;}

}

}

void Display(unsigned char x)

{

P2=0xdf; //引脚输出低电平,DS6点亮

P0=Tab[x/100]; //显示十位

delay1ms(5);

P2=0xbf; //引脚输出低电平,DS6点亮

P0=Tab[x%100/10]; //显示十位

delay1ms(5);

P2=0x7f; //引脚输出低电平,DS7点亮 P0=Tab[x%10]; //显示个位

delay1ms(5);

P2=0xff;

}

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

函数功能:主函数

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

void main(void)

{

TMOD=0x06; // TMOD=0000 0110B,使用计数器T0的模式2

EA=1; //开总中断

ET0=1; //允许定时器T0的中断

EX0=1; //允许外中断INT0

IT0=1; //INT0为下负脉冲触发方式

TR0=1; //启动T0

TH0=TL0=256-1; //计数器T0高8位赋初值 255

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

{

//x=TL0;

Display(x);

} }

//INT0终端函数

void clear0() interrupt 0

{ x=0;}

//T0 计数器中断

void Key_counter() interrupt 1

{

if(P34==0){

delay1ms(20);

if(P34==0){

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

}

}

}

外中断字符查询

#include <>

#define uchar unsigned char

#define uint unsigned int

uchar code trdata[]={'R','I','C','H','M','C','U',0x0d,0x0a,0x00}; void delay1ms(uint i)

{

uchar j;

while(i--)

{

for(j=0;j<115;j++) //1ms基准延时程序

{;}

}

}

main()

{

uchar i;

SCON= 0x40; //串口方式1不允许接收

//SM0=0;

//SM1=1;

//REN=0;

PCON=0x80; //SMOD=0

TMOD= 0x20; //定时器1定时方式2

TH1= 0xff; // 57600波特率

TL1= 0xff;

TR1= 1; //启动定时器 while(1)

{

i=0;

while(trdata[i]!=0x00)

{

SBUF=trdata[i];

while(!TI);

TI=0;

i++;

}

delay1ms(1000);

}

}