单片机例程
} for (i = 0 ;i < 8 ; i++) { P2 = LED; delay(500); LED = LED >> 1; // 右移 LED = LED | 0x80; // 移位后,后面的位为高电平 } } }
/*******延时函数*************/ void delay(unsigned int i) {
unsigned char j; for(i; i > 0; i--)
for(j = 255; j > 0; j--); }
/*******************************************************************************
* 六
按键控制程序
*
* 连接方法:JP10(P2) 与 JP1 (LED灯)连接, *
* JP11(P0) 与 JP5(按键接口)连接 * * 开始点亮P1LED * * 按P01 LED向右移一位 *
* 按P00 LED向左移一位 *
* 连续按动按钮LED会不停的左移或右移 *
*******************************************************************************/
#include
I Believe I Can Do !
6
单片机例程
#include
unsigned char scan_key();
void proc_key(unsigned char key_v); void delayms(unsigned char ms); sbit K1 = P0^0; //对应按钮K1 sbit K2 = P0^1; //对应按钮K2 main() { unsigned char key_s,key_v; key_v = 0x03; P2 = 0xfe; while(1) { key_s = scan_key(); if(key_s != key_v) { delayms(10); key_s = scan_key(); if(key_s != key_v) { key_v = key_s; proc_key(key_v); } } } }
unsigned char scan_key() { unsigned char key_s; key_s = 0x00; key_s |= K2; key_s <<= 1; key_s |= K1; return key_s; }
void proc_key(unsigned char key_v) { if((key_v & 0x01) == 0) { P2 = _cror_(P2,1); } else if((key_v & 0x02) == 0) { P2 = _crol_(P2, 1);
I Believe I Can Do 7
! 单片机例程
} }
void delayms(unsigned char ms) // 延时子程序 { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } }
/******************************************************************/
/* 七 按键状态显示试验
/* * /* 连接方法:连接JP10(P0)与JP5(按钮接口) * /* JP11 (P2)与JP1(LED接口) * * /*按键则点亮LED灯,8路指示灯接p0口 /******************************************************************/ #include
sbit BEEP = P1^5; //将蜂鸣器定义在 P1.5 端口上 sbit RELAY = P1^4; //将继电器定义在 P1.4 端口上
sbit K1 = P0^0; sbit K2 = 0x80^1; //P0和0X80表示的是同一个地址 sbit K3 = P0^2; sbit K4 = 0x80^3; sbit K5 = P0^4; sbit K6 = 0x80^5;
void beep();
/*********************************************************/ main() {
while(1) {
P2 = 0xff; if(K1 == 0) P2 = 0xfe;
if(K2 != 1) P2 = 0xfd;
I Believe I Can Do !
*
* 8
单片机例程
if(!K3) P2 = 0xfb;
if(~K4) P2 = 0xf7; if(!K1&&!K2) P2 = 0x00;//2个按钮同时按下 P2口8个灯全部点亮 if(!K5 ) beep();//喇叭发声 if (!K6 ) RELAY = 0; //通过了反相器(HC6800试用) else RELAY = 1; } }
/**********************************************************/ void beep() {
unsigned char i , j; for (i=0;i<100;i++) {
BEEP=!BEEP; //BEEP取反 for (j = 0 ; j<250 ; j++) //需要产生方波 _nop_(); }
BEEP=1; //关闭蜂鸣器 }
/************************************************************************ 八 [文件名] C51音乐程序(八月桂花)
[功能] 通过单片机演奏音乐
/**********************************************************************/ #include
I Believe I Can Do !
9
单片机例程
//本例采用89C52, 晶振为11.0592MHZ
//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍; //所以拿出谱子, 试探编吧!
sbit Beep = P1^5 ;
unsigned char n=0; //n为节拍常数变量 unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数, 0x20, 0x40, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x10, 0x1C, 0x10, 0x18 , 0x40, 0x1C, 0x20, 0x20 , 0x20, 0x1C, 0x20, 0x18 , 0x20, 0x20, 0x80, 0xFF , 0x20, 0x30, 0x1C, 0x10 , 0x18, 0x20, 0x15, 0x20 , 0x1C, 0x20, 0x20, 0x20 , 0x26, 0x40, 0x20, 0x20 , 0x2B, 0x20, 0x26, 0x20 , 0x20, 0x20, 0x30, 0x80 , 0xFF, 0x20, 0x20, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x20, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x20, 0x15 , 0x20, 0x1C, 0x20, 0x20 , 0x20, 0x26, 0x40, 0x20 , 0x20, 0x2B, 0x20, 0x26 , 0x20, 0x20, 0x20, 0x30 , 0x80, 0x20, 0x30, 0x1C , 0x10, 0x20, 0x10, 0x1C , 0x10, 0x20, 0x20, 0x26 , 0x20, 0x2B, 0x20, 0x30 , 0x20, 0x2B, 0x40, 0x20 , 0x15, 0x1F, 0x05, 0x20 , 0x10, 0x1C, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20,
I Believe I Can Do !
10