
熟悉或了解目标单片机的性能、资源等等与编程有关的东西。
熟悉或熟练掌握一门编程语言。
准备、配置好一种编译软件。
准备、配置好目标单片机的烧录装置。
/*http://zhidao.baidu.com/question/287237680.html
P1端口P1^0-P1^5端口接的6个独立按键
控制P2的p2^0-p2^5共6个对应的I/O口输出2种状态,
例如
按一下p1^0的按键,那么p2^0接口的LED就长亮,
重复按一下p1^0的按键,p2^0接口的LED就熄灭,
1到6路都如此
P1^6和P1^7也和如上的按键功能相同,
但是对应的P2^6和P2^7输出的是100ms交替闪烁的信号,
例如
按一下P1^6的按键,那么p2^6接口的LED就以100ms的速度闪烁,
重复按一下p1^6的按键,p2^6接口的LED就熄灭,
p2^7都如此
下列程序已经调试通过,可以满足上述要求。
*/
#include <AT89X51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//-----------------------------------------------------------
uchar aa, bb, cc, dd//设定变量.
//-----------------------------------------------------------
void delay(uint ms)
{
uchar t
while(ms--) for(t = 0t <123t++)
}
//-----------------------------------------------------------
void main(void)
{
TMOD = 0x01// T0定时方式1
TL0 = (65536 - 50000) % 256//50ms@12MHz
TH0 = (65536 - 50000) / 256
TR0 = 1 //启动定时器0
IE = 0x82//中断允许.
bb = 0x3f
cc = 0
while(1) {
aa = P1 //读入按键.
if (aa <255) {//如果有按下.
delay(10) //延时消抖.
aa = P1//再读.
if (aa <255) { //如果仍然按下.
if (aa == 255 - 1) bb ^= 1 //根据按键,分别处理.
if (aa == 255 - 2) bb ^= 2 //这里也可以使用 case 语句.
if (aa == 255 - 4) bb ^= 4
if (aa == 255 - 8) bb ^= 8
if (aa == 255 - 16) bb ^= 16
if (aa == 255 - 32) bb ^= 32
if (aa == 255 - 64) bb ^= 64
if (aa == 255 - 128) bb ^= 128
P2 = (cc &0xc0) + (bb &0x3f)//输出.
while(aa <255) aa = P1 //等待按键松开.
} } }
}
//-----------------------------------------------------------
void T0_INT() interrupt 1
{
TL0 = (65536 - 50000) % 256//50ms@12MHz
TH0 = (65536 - 50000) / 256
dd++
dd %= 4//4,代表200ms
if (dd == 0) { //如果时间到了.
if ((bb &64) == 64)cc ^= 64 //按照指定位取反.
elsecc |= 64 //关闭指定位.
if ((bb &128) == 128) cc ^= 128
elsecc |= 128//关闭指定位.
P2 = (cc &0xc0) + (bb &0x3f)//输出.
}
}
//-----------------------------------------------------------
1、确定开发环境:选择一款适合的开发软件和编译器,例如Keil、IAR等。同时需要安装相应的驱动程序和软件库。2、配置工程:在开发软件中创建一个新的工程,并进行一系列配置,包括芯片型号、时钟频率、外设等。
3、编写程序:使用C语言或汇编语言编写程序代码。主要包括初始化代码、中断处理程序、主函数等。
4、编译程序:使用编译器将程序代码转化为机器语言,生成可执行文件。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)