单片机程序大全
- 格式: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);
}
}