zlng 发表于 2011-2-27 23:48:09

用78f9234 控制LED灯!!

用IAR环境

/*==============================================================================*/
实现功能:按下KEY1 键点亮LED;再按一次KEY1关掉LED灯。
注:用的按键是带锁按键,按一次短路,再按一次断开。
/*==============================================================================*/

#include<io78f9234.h>
#include<intrinsiCS.h>

/*====================== 选项字节配置 ==========================================
内部时钟,
==============================================================================*/
#pragma location = 0X0080
__root const unsigned char XUAN=0X9c;

void PORT_Init(void)
{
clearbit(PM4,0XFF);//P4设定为11111111
clearbit(PU4,0X00);//P4设定为00000000
}
#define LEDP4_bit.no0   //系统电源指示灯

void main()
{

LSRSTOP=0x01;   //停止低速内部振荡器
clock();      //时钟初始化
PORT_Init();    //端口初始化

while(1)
{
//LED=0;         
if(KEY1==0)      //如果按下开关
   {
    LED=1;         //打开系统指示灯

    }
}   
}

有问题请教:1、为什么如果我在IF语句前加上LED=0;当我按下按键KEY1时用万用表量连接KEY1的IO口电压是1.6V。
               而如果把LED=0 这句取消掉,下载到单片机上,然后再用万用表量连接KEY1的IO口电压是3.7V。

RENESAS-etouch 发表于 2011-2-28 16:00:08

有些问题:
1,按键是哪个口输入的?猜测是P4的某个口;
2,P4口的低位用于驱动LED指示灯,怎么还设置成输入的?灯应该乱亮吧;
3,按键电路是怎样的?

zlng 发表于 2011-3-2 02:27:28

NEC的9234单片机,如果把一个口设为输入。并且设为内部上拉,这个IO口外部不接任何东西,用万用表量这个IO口电压应该是多少?
VCC 是5V供电!
看数据手册340页 应该是等于VCC!
现在我把P0四个口外部全部取消,不接任何东西!P0四个口都设为内部上拉!

如下我写的程序,为什么量P0四个口都才是1.85V

#include<io78f9234.h>
#include<intrinsiCS.h>

/*====================== 选项字节配置 ==========================================
内部时钟,
==============================================================================*/
#pragma location = 0X0080
__root const unsigned char XUAN=0X9c;
//__root const unsigned char XUAN=0X9f; 设置成外部石英晶体
/*=====选项字节,设置实用内部高速时钟电路,低速内部振荡器时钟可由软件停止======*/


/*以下声明是对寄存器的操作,分别对寄存器的某一位清零或置一*/
#define clearbit(Reg, ClrBitMap) Reg &= ~ClrBitMap    //清零操作
#define setbit(Reg, SetBitMap) Reg |= SetBitMap       //置1操作

//#define DI() __disable_interrupt()//屏蔽所有中断
//#define EI() __enable_interrupt()//使能所有中断


/*======== P0 4位声明 ===============*/

#define K1P0_bit.no0
#define K2P0_bit.no1
#define k3P0_bit.no2
#define k4P0_bit.no3

/*====================== 函数声明 ==========================================*/
void clock();//时钟初始化函数
void PORT_Init();//端口初始化函数
void main();


/*================== 时钟初始化函数,系统时钟为8MHz ===========================*/
void clock()
{
PPCC=0X00;
PCC=0X00;
}


/*================== 端口初始化函数===========================================*/

void PORT_Init(void)
{

clearbit(PM0,0X0);//P0设定为输入0000
clearbit(PU0,0Xf);//P0设内部上拉1111

}


/*========================== 主函数===========================================*/

void main()
{

LSRSTOP=0x01;   //停止低速内部振荡器
clock();      //时钟初始化
PORT_Init();    //端口初始化

while(1);

}

zlng 发表于 2011-3-2 02:33:54

注!就算才是1.85V,但是PO口是可以检测到输入的,就是说我如果把PO口某一位外部接一个按键.如果按键按下,让其它口如P4口的某一位输出一个高电平是可以实现的。

先睡啦。看明天有没有那位高手能帮我看看是那里的问题!!!

linminsong 发表于 2011-4-3 03:44:08

回复【3楼】zlng
-----------------------------------------------------------------------

当IO设为输入时用万用表测量时有可能被万用表内部分压电阻拉低,所以你测出来才1.85V。而实际应该>=0.8VDD
页: [1]
查看完整版本: 用78f9234 控制LED灯!!