单片机程序大全
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define uint unsigned int
sbit P27=P2^7;
sbit fmq=P3^6;
uchar key;
unsigned char code disp_code[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
fmq=1; delay1ms(200); } } }
中断 #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit d1=P1^0; uchar num; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uint z); void main() {
90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay1ms(uint i)
{uchar j;
while(i--)
{for(j=0;j<115;j++)
//1ms 基准延时程序
{;}
}
}
void beep() / / 产生 1KHZ频率声音的函数
{
fmq=0;
delay500us();
case(0xeb):display(8);break; case(0xdb):display(9);break; case(0xbb):display(10);break; case(0x7b):display(11);break; } P1=0xf7; temp=P1; switch(temp) { case(0xe7):display(12);break; case(0xd7):display(13);break; case(0xb7):display(14);break; case(0x77):display(15);break; } } } } }
独立按键
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P27=P2^7;
sbit K5=P1^4;
sbit fmq=P3^6;
uchar num;
unsigned
char
s8[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x
********
函数功能:定时器 T0 的中断服务程序
*******************************************************
*******/
void Time0(void) interrupt 1 using 0 //
main()
{
uchar tt;
P0 = 0xbf;
P27 =0;
//
P1 = 0xff;
while(1)
{
P1=0xf0;
if((P1&0xf0)!=0xf0){
keyscan();
P0=disp_code[key];
for(tt=0;tt<200;tt++)
{ beep();}
数码管显示 "-"
unsigned char code key_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
void delay1ms(uint i)
{
uchar j;
while(i--)
EA=1;// 开总中断 EX0=1;// 开外部中断 0 //IT0=1; //TCON=0x01; wela=1;//11101010 P0=0xea;
wela=0; while(1) {
for(num=0;num<16;num++) { d1=1; dula=1; P0=table[num]; dula=0; delay(1000); }
fmq=1;
delay500us();
}
/******************************************************
****
键盘扫描子函数
*******************************************************
***/
uchar keyscan()
/* 行线接 P1.0 - P1.3 ,列线接 P1.4 -P1.7 。 根据线反转法扫描键盘返回的键值编码查键值编码表, 键值并送数码管显示。 开机时,数码管显示“-” 。 */
从而得到
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
} } void delay(uint z) {
uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--); } void exter0() interrupt 0 {
d1=0;
} 定时器 #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char uchar aa,num; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void main() {
********
函数功能:主函数
*******************************************************
*******/
void main(void)
{
i=0;
EA=1;
//
开总中断
ET0=1;
//
定时器 T0 中断允许
TMOD=0x01;
//
使用定时器 T0 的模式 1
if(aa==20) {
aa=0; num++; if(num==10) num=0; dula=1; P0=table[num]; dula=0;
}
}
}
void timer0() interrupt 1
{
//TH0=(8192-5000)/32;
//TL0=(8192-5000)%32;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
中断控制 LED // 用定时器 T0 的中断控制 1 位 LED闪烁
#include<reg51.h> //
包含 51 单片机寄存器定义的头文件
sbit D0=P0^0; // 将 D0位定义为 P0.0 引脚
unsigned int i;
/******************************************************
num=0; 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; EA=1;// 开总中断 ET0=1;// 开定时器 0 中断 TR0=1;// 启动定时器 0 wela=1; P0=0x24; wela=0; dula=1; P0=0x3f; dula=0; while(1) {
code
fmq=1; delay500us(); } void delay500us() { unsigned char j; for(j=0;j<57;j++) {; } } void main() { uchar t; P27=0; while(1){
if(K5==0){ delay1ms(15); if(K5==0){ for(t=0;t<100;t++) { beep();}
TH0=(65536-50000)/256; // 定时器 T0 的高 8 位赋初值
TL0=(65536-50000)%256; // 定时器 T0 的高 8 位赋初值
TR0=1;
//
启动定时器 T0
while(1);// 无限循环等待中断
}
/******************************************************
{
uchar scan1,scan2,keycode,j;
P1=0xf0;
scan1=P1;
if((scan1&0xf0)!=0xf0)
//
{
delay1ms(20);
//
scan1=P1;
if((scan1&0xf0)!=0xf0) //
{
P1=0x0f; //
线反转法的核心
scan2=P1;
keycode=scan1|scan2; //
// 数据类型的宏定义
sbit P27=P2^7;
unsigned
char
code
table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0
x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF};
// 共阳数码管显示字型码数组 1011 1111 "-"
}
void main(void)
{
unsigned char temp;
display(16); // 初始显示 "-"
while(1)
{
P1=0xff; // 先向 P1 口写 1;端口读状态
P1=0xf0;
temp=P1;
if(temp!=0xf0)
{
delay1ms(15);
if(temp!=0xf0)
case(0xed):display(4);break; case(0xdd):display(5);break; case(0xbd):display(6);break; case(0x7d):display(7);break; } P1=0xfb; temp=P1; switch(temp) {
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //
{
key=j;
return(key);
}
}
}
}
else
P1=0xff; //P1 口写 1 输入状态
判键是否按下 延时 20ms
二次判键是否按下
组合成键编码 查表得键值
return (16);//"-"
}
{
for(j=0;j<115;j++)
//1ms 基准延时程序
{;}
}
}
void delay500us()
wenku.baidu.com
{
unsigned char j;
for(j=0;j<57;j++)
//500us 基准延时程序
{ ;}
}
void beep() // 产生 1KHZ频率声音的函数
{
fmq=0;
delay500us();
{
P1=0xfe;
temp=P1; switch(temp) {
case(0xee):display(0);break; case(0xde):display(1);break; case(0xbe):display(2);break; case(0x7e):display(3);break;
} P1=0xfd; temp=P1; switch(temp) {
num=num+1; if(num==16){ num=0; }
//500us 基准延时程序
while(!K5);// } } P0=s8[num]; } }
等待按键释放
#include<reg52.h>
#define uchar unsigned char //
数据类型的宏定义
#define uint unsigned int
void delay1ms(uint i)
{
uchar j; while(i--) { for(j=0;j<115;j++)
; //1ms 基准延时程序
}
}
void display(unsigned char i)
{
P27=0; //
选通最有端的数码管显示
P0=table[i]; //
显示 i 参数传来的字型码