我在学单片机,学学停停..停停学学...发现这样根本提高不了自己.
以前学的都给忘了...今天搞一个简单的按键LED程序都搞了很长时间.还出错了.
HEHE...小错误.居然是把IO口的高低位弄反了...
真是晕...看来搞单片机的程序.只能一直坚持...准备有空DIY下一个电源玩玩..
底下附上我这次搞的一个超小程序...
配合我博客上的实验板8个按键.分别让LED显示1111-8888.
#pragma db code
#include<AT89X51.H>
#include<ic2.h>
#define uchar unsigned char
#define uint unsigned int
/*=====数码管位及按键定义=====*/
sbit LED_0=P1^0;
sbit LED_1=P1^1;
sbit LED_2=P1^2;
sbit LED_3=P1^3;
/*=====0-9=====A-G=====*/
uchar a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0x86,0x8e,0x82};
/*=====四个数码管显示数据存放处=====*/
uchar one,two,three,four;
uint key;
void delay(uint x);
void display(void);
void led_analyze(uint i);
void keyl();
void main()
{
while(1)//无限循环
{
keyl();//调用按键子程序
led_analyze(key);//调用分解数据子程序
display();//调用显示子程序
}
}
/*====键盘扫描=====*/
void keyl()
{
P2=0xfd;//开按键
if(P2!=0xfd)//判断有无键按下
{
delay(500);//延时
if(P2!=0xfe)//有键按下,判断哪个键按下执行某项操作
{
if(P2==0xf9) key="1111";
else if(P2==0xf5) key="3333";
else if(P2==0xed) key="5555";
else if(P2==0xdd) key="7777";
}
}
P2=0xfe;//开按键
if(P2!=0xfe)//判断有无键按下
{
delay(500);//延时
if(P2!=0xfd);//有键按下,判断哪个键并执行操作
{
if(P2==0xfa) key="2222";
else if(P2==0xf6)key=4444;
else if(P2==0xee)key=6666;
else if(P2==0xde)key=8888;
}
}
}
/*====延时函数=====*/
void delay(uint x)
{
uint i;
for(i=0;i<x;i++);
}
/*====显示函数=====*/
void display(void)
{
P0=a[one];//调用显示数据
LED_0=0; //显示开
delay(100); //调用键盘扫描
LED_0=1; //关显示
P0=a[two];
LED_1=0;
delay(100);
LED_1=1;
P0=a[three];
LED_2=0;
delay(100);
LED_2=1;
P0=a[four];
LED_3=0;
delay(100);
LED_3=1;
}
/*====分解显示数据=====*/
void led_analyze(uint i)
{
one="i/1000";
two=(i/100)%10;
three=(i%100)/10;
four=(i%100)%10;
}
/*=====================*/
用户1337912 2009-5-12 12:27
用户514462 2008-7-30 23:56
用户1272036 2008-5-31 17:56
用户140223 2008-5-8 16:59
用户131105 2008-2-8 12:09
用户1405008 2007-12-30 13:06
支持,顶起!
用户498106 2007-12-29 20:03
用户115469 2007-12-29 08:56
用户130362 2007-12-29 08:40
先顶一个了
用户60235 2007-6-4 18:30