STC单片机C语言通用万能编程模板.docx
《STC单片机C语言通用万能编程模板.docx》由会员分享,可在线阅读,更多相关《STC单片机C语言通用万能编程模板.docx(9页珍藏版)》请在冰豆网上搜索。
STC单片机C语言通用万能编程模板
《8051单片机C语言编程模板》
1.函数头文件
/******************************************************************************
程序名:
编写人:
编写时间:
20年月日
硬件支持:
接口说明:
修改日志:
/******************************************************************************
说明:
/*****************************************************************************/
#include<>
秒级CPU延时函数
/******************************************************************************
函数名:
毫秒级CPU延时函数
调用:
DELAY_MS();
参数:
1~65535(参数不可为0)
返回值:
无
结果:
占用CPU方式延时与参数数值相同的毫秒时间
备注:
应用于1T单片机时i<600,应用于12T单片机时i<125(在此预为1T单片机数值)
/*****************************************************************************/
voidDELAY_MS(unsignedinta)
{
unsignedinti;
while(--a!
=0)
{
for(i=0;i<600;i++);
}
}
/*****************************************************************************/
-----------------------------------------------------------------------------
M1M0方式说明
00013位T/C,由TL低5位和TH的8位组成13位计数器
01116位T/C,TL和TH共16位计数器
1028位T/C,TL用于计数,当TL溢出时将TH中的值自动写入TL
113两组8位T/C
-----------------------------------------------------------------------------
3.定时/计数器初始化函数
/******************************************************************************
函数名:
定时/计数器初始化函数
调用:
T_C_init();
参数:
无
返回值:
无
结果:
设置SFR中T/C1和(或)T/C0相关参数
备注:
本函数控制T/C1和T/C0,不需要使用的部分可用时/计数器1中断处理函数
/******************************************************************************
函数名:
定时/计数器1中断处理函数
调用:
[T/C1溢出后中断处理]
参数:
无
返回值:
无
结果:
重新写入16位计数寄存器初始值,处理用户程序
备注:
必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致
/*****************************************************************************/
voidT_C1(void)interrupt3using3时/计数器0中断处理函数
/******************************************************************************
函数名:
定时/计数器0中断处理函数
调用:
[T/C0溢出后中断处理]
参数:
无
返回值:
无
结果:
重新写入16位计数寄存器初始值,处理用户程序
备注:
必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致
/*****************************************************************************/
voidT_C0(void)interrupt1using1部中断INT初始化函数
/******************************************************************************
函数名:
外部中断INT初始化函数
调用:
INT_init();
参数:
无
返回值:
无
结果:
启动外部中断INT1、INT0中断,设置中断方式
备注:
/*****************************************************************************/
voidINT_init(void)
{
EA=1;部中断INT1中断处理程序
/******************************************************************************
函数名:
外部中断INT1中断处理程序
调用:
[外部引脚INT1中断处理]
参数:
无
返回值:
无
结果:
用户处理外部中断信号
备注:
/*****************************************************************************/
voidINT_1(void)interrupt2using2部中断INT0中断处理程序
/******************************************************************************
函数名:
外部中断INT0中断处理程序
调用:
[外部引脚INT0中断处理]
参数:
无
返回值:
无
结果:
用户处理外部中断信号
备注:
/*****************************************************************************/
voidINT_0(void)interrupt0using2通I/O口模拟PWM生成程序
/******************************************************************************
函数名:
普通I/O口模拟PWM生成程序
调用:
display()
备注:
/*****************************************************************************/
voiddisplay(unsignedinta)函数
/******************************************************************************
函数名:
主函数
调用:
无
参数:
无
返回值:
无
结果:
程序开始处,无限循环
备注:
/*****************************************************************************/
voidmain(void)
{
/******************************************************************************
函数名:
扬声器驱动
备注:
/*****************************************************************************/
unsignedcharMUSIC;
unsignedcharSTH0;
unsignedcharSTL0;
unsignedintcodetab[]={
64021,64103,64260,64400,8个独立式键盘驱动程序
/******************************************************************************
函数名:
8个独立式键盘驱动程序
调用:
=Key();
参数:
无
返回值:
unsignedchar键值0~8
结果:
有键按下时返回值为键值1~8,无键按下时返回值为0
备注:
在主函数中不断调用
/*****************************************************************************/
unsignedcharKey()16个阵列式键盘驱动程序
/******************************************************************************
函数名:
16个阵列式键盘驱动程序
调用:
=Key();
参数:
无
返回值:
unsignedchar键值0~16
结果:
有键按下时返回值为键值1~16,无键按下时返回值为0
备注:
在主函数中不断调用
/*****************************************************************************/
unsignedcharKey(void)//4*4阵列键盘处理程序
{
unsignedchara,b,c;
KEY=0x0f;//设定键盘初始电平状态
if(KEY!
=0x0f)//读取键盘状态是否改变
{
Delay(20);//延时20ms去抖动
if(KEY!
=0x0f)//重新读取
{
a=KEY;//寄存状态值到a
}
KEY=0xf0;//设定键盘反向电平状态
c=KEY;//读取反向电平状态值到c
a=a|c;//a与c相或
switch(a)//键盘状态查表
{
case0xee:
b=1;break;
case0xed:
b=2;break;
case0xeb:
b=3;break;
case0xe7:
b=4;break;
case0xde:
b=5;break;
case0xdd:
b=6;break;
case0xdb:
b=7;break;
case0xd7:
b=8;break;
case0xbe:
b=9;break;
case0xbd:
b=10;break;
case0xbb:
b=11;break;
case0xb7:
b=12;break;
case0x7e:
b=13;break;
case0x7d:
b=14;break;
case0x7b:
b=15;break;
case0x77:
b=16;break;
default:
b=0;break;
}
}
return(b);//将b中的键值代号送入函数返回值
}
/*****************************************************************************/
T_C_init();
UART_init();
INT_init();
LCM2402_Init();
//P1M0=0xff;//将P1接口设置为高阻态输入(去掉“//”解除屏蔽)
//P1M1=0x00;//触摸按键启用
//DELAY_MS(200);//延时等待I/O接口电平状态稳定
PWM_init();//PWM初始化
//初始程序
while
(1)
{
//无限循环程序
}
}
/*****************************************************************************/