单片机子程序集.doc
文本预览下载声明
单片机子程序集锦
按ctrl+home回到首页
按ctrl并点击目录中的内容即可转到相应的页数
整理:李辉 寇巍巍 姜欣
目录
各种头文件级定义……………………………………1
数码管及中断…………………………………………2
键盘……………………………………………………3
A/D与D/A转换………………………………………7
串口通信………………………………………………8
1602液晶………………………………………………9
IIC总线………………………………………………10
一、各种头文件级定义
#include reg52.h
#include intrins.h
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //数码管显示0~F
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef}; //数码管加点显示0.~9.
uchar code table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //控制数码管位选从做到右
void delay()
{; ;} //短暂延时函数
void delay(uint z) //延时MS函数,Z为延时的MS数
{
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
sbit write=0; //各种常见变量名对应的端口号
sbit sda=P2^0;
sbit scl=P2^1;
sbit beep=P2^3;
sbit wela=P2^7;
sbit dula=P2^6;
sbit dacs=P3^2;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit adwr=P3^6;
sbit adrd=P3^7;
二、数码管及中断
void display(uchar)
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[];
dula=0;
delay(1);
} //数码管显示函数
void init()
{
EA=1;
EX0=1;
IT0=0;
} //外部中断0初始化函数
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
} //定时器0的初始化
void T0_() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==20)
{
tt=0;
num++;
if(num==60);
num=0;
}
} //晶振频率为12MHZ时计时器0中断,间隔1S
三、键盘
void keyscan()
{
P3=0xfe;
temp=P3;
temp=temp0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp0xf0;
}
display(key)
显示全部