单片机程序大全
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();}
数码管显示 "-"
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) {
}
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)
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();
{
for(j=0;j<115;j++)
//1ms 基准延时程序
{;}
}
}
void delay500us()
{
unsigned char j;
for(j=0;j<57;j++)
//500us 基准延时程序
{ ;}
}
void beep() // 产生 1KHZ频率声音的函数
{
fmq=0;
delay500us();
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() {
/* 行线接 P1.0 - P1.3 ,列线接 P1.4 -P1.7 。 根据线反转法扫描键盘返回的键值编码查键值编码表, 键值并送数码管显示。 开机时,数码管显示“-” 。 */
从而得到
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //
{
key=j;
return(key);
}
}
}
}
else
P1=0xff; //P1 口写 1 输入状态
判键是否按下 延时 20ms
二次判键是否按下
组合成键编码 查表得键值
return (16);//"-"
}
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) {
#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};
{
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; //
********
函数功能:定时器 T0 的中断服务程序
*******************************************************
*******/
void Time0(void) interrupt 1 using 0 //
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);// 无限循环等待中断
}
/******************************************************
{
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) {
独立按键
#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,0xLeabharlann 2,0x82,0xf8,0x80,0x
// 数据类型的宏定义
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 "-"
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 main(void)
{
i=0;
EA=1;
//
开总中断
ET0=1;
//
定时器 T0 中断允许
TMOD=0x01;
//
使用定时器 T0 的模式 1
void delay1ms(uint i)
{
uchar j; while(i--) { for(j=0;j<115;j++)
; //1ms 基准延时程序
}
}
void display(unsigned char i)
{
P27=0; //