1. 点亮开发板上的第1个发光管
#include
//当然也可以改成 reg52.h STC.H 功能一样的,只是定义的IO口有一点区别,51单片机可以通用。
sbit led=P1^0; //定义一个LED 为P1.0 IO口
void main() //C语言主函数 { led=0; //单片机IO P1.0脚输出一个低电平,点亮发光管。 高电平为5V 低电平为0。 while(1); }
2. 用逐位赋值的方法点亮第一、第三、第五、第七个发光二极管
#include
sbit led1=P1^0; //第一个led是和P1^0口连接的。
sbit led3=P1^2; sbit led5=P1^4; sbit led7=P1^6; void main() { led1=0; //参照电路图可知,P1^0为低电平,可以让led1点亮。 led3=0; led5=0; led7=0; while(1);//此处设置一个死循环,让程序停留在这里,防止跑飞。 }
3. 用总线操作的方法点亮第一、第三、第五、第七个发光二极管
#include
sbit led=P1^0;
void delay(unsigned int i) { unsigned int j; unsigned char k; for(j=i;j>0;j--) for(k=125;k>0;k--); }
void main() { unsigned char m; for(m=20;m>0;m--) { led=~led; //没隔一段时间即对输出取反。 delay(3000); //闪烁间隔。 } while(1); //闪烁十次后,到此不再闪烁。 }
5. 使八位LED逐位移动并不断循环 #include
#include
void delay(unsigned int i) { unsigned int j; unsigned char k; for(j=i;j>0;j--) for(k=125;k>0;k--); }
void main() { P1=0xfe; delay(1000); while(1) { // unsigned char m; //P1=0xfe; // delay(1000); // for(m=7;m>0;m--) { P1=_crol_(P1,1); //P1逐步左移一位。 delay(1000); }
} }
6. 使八位LED逐位移动并不断循环,该方法采用逐个查表赋值的方法 #include
void main() { while(1) { unsigned char m; for(m=0;m<8;m++) { P1=table[m]; delay(2000); } }
7. 用四个led指示HJ-3G实验板键盘最下面一排的四个按键状态。当按键按下时,对应led亮;松开后,对应led灭 #include
void main() { while(1) { if(s2==0) led1=0; else led1=1; if(s3==0) led2=0;
else led2=1; if(s4==0) led3=0; else led3=1; if(s5==0) led4=0; else led4=1; } }
8.流水灯
#include
void delay(unsigned char i) { unsigned char m,n; for(m=i;m>0;m--) for(n=125;n>0;n--); }
void main()
{ unsigned char k; while(1) { P1=0xfe; for(k=0;k<8;k++) { delay(2000); P1=_crol_(P1,1); } } }
9. 流水灯
#include
void delay(unsigned char i) { unsigned char m,n; for(m=i;m>0;m--) for(n=125;n>0;n--); }
void main() { while(1)
{ P1=0x7e; delay(2000); P1=0xbd; delay(2000); P1=0xdb; delay(2000); P1=0xe7; delay(2000); P1=0xdb; delay(2000); P1=0xbd; delay(2000); P1=0x7e; delay(2000); } }
10. 流水灯
#include
void delay(unsigned char i) { unsigned char m,n; for(m=i;m>0;m--) for(n=125;n>0;n--); }
void main() { unsigned char m=255; while(1) { P1=m; delay(2000); m--; } }
11. 当按键按下时,led亮;松开后,灭。 #include
sbit k1=P3^4; sbit led=P1^0;
void main() { while(1) //通过大循环不断扫描按键状态 { if(k1==0)
led=0; else led=1; } }
12. 本程序以HL-1 学习板中的k1键为例,模拟其具有2种功能, 一是点亮一个发光二极管,二是蜂鸣器发声
#include
#define uchar unsigned char uchar num;
sbit beep=P2^3; sbit led=P1^0; sbit k1=P3^4;
void delay(uchar i) { uchar j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); }
void main() { while(1) { if(k1==0) { delay(20); //消抖 if(k1==0) { while(!k1); //等待按键松开 num++; } switch(num) { case 1: led=0; beep=1; break; case 2: beep=0; led=1; num=0; break; } } } }
13. 使用HL-1 实验板键盘最下面一排左侧的S2键,控制一LED的亮灭。按下后松开,led亮;按下后再松开,led灭。 #include
sbit s2=P3^4; //采集按键状态,此时作为输入引脚 sbit led=P1^0; //此时作为输出引脚。
void delay(unsigned char p) { unsigned char m,n; for(m=p;m>0;m--) for(n=125;n>0;n--); }
void main() { while(1) { if(s2==0) { delay(10); //消抖 if(s2==0) { while(!s2);//等待按键松开。 led=~led; } } } }
14. 不管两个开关当前的状态如何,只要有一个开关状态发声变化,都会使照明灯在打亮或者熄灭两种状态间切换。 #include
sbit light=P1^0; sbit s1=P3^4; sbit s2=P3^5;
bit change,s1sta,s2sta;//s1sta,s2sta为开关s1和s2前一时刻的状态,用来和当前的s1与s2状态进行对比, //进而判决两个开关的状态有无发生变化。 bit keyscan() { if((s1^s1sta)||(s2^s2sta)) //^为异或,若两者不同,则结果为1。即若两开关中,任一开关的状态发生变化,则此条件即为真。 change=1; return change; }
void main() { s1sta=s1; s2sta=s2; while(1) { keyscan(); //扫描按键状态是否变化,即是否有人更改了按键状态。 if(change) { change=0; //清零 light=~light; //一旦发现有开关状态发生了变化,则灯的状态就取反。(若以前亮,则熄灭;反之则打亮) s1sta=s1; //同时,将s1和s2的当前状态送给s1sta和s2sta,为以后的比较做准备。 s2sta=s2; } } }
15. 4*4键盘检测程序,按下键后相应的代码显示在数码管上
#include
unsigned char i=100; unsigned char j,k,temp,key; void delay(unsigned char i) {
for(j=i;j>0;j--)
for(k=125;k>0;k--); }
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; display(unsigned char num) {
P0=table[num]; dula=1; dula=0; P0=0xc0; wela=1;
wela=0; }
void main() {
dula=0; wela=0; while(1) {
P3=0xfe; temp=P3;
temp=temp&0xf0; if(temp!=0xf0) {
delay(10); if(temp!=0xf0) {
temp=P3; switch(temp) {
case 0xed: temp=temp&0xf0; if(temp!=0xf0) {
delay(10); 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=temp&0xf0; beep=0; }
beep=1; display(key); P1=0xfe; } }
P3=0xfd; temp=P3; key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; }
while(temp!=0xf0) {
temp=P3;
temp=temp&0xf0; beep=0; }
beep=1;
display(key); } }
P3=0xfb; temp=P3;
temp=temp&0xf0; if(temp!=0xf0) {
delay(10); if(temp!=0xf0) {
temp=P3; switch(temp) {
case 0xeb: key=8;