用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。 有些问题:
1,按键是哪个口输入的?猜测是P4的某个口;
2,P4口的低位用于驱动LED指示灯,怎么还设置成输入的?灯应该乱亮吧;
3,按键电路是怎样的? 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);
} 注!就算才是1.85V,但是PO口是可以检测到输入的,就是说我如果把PO口某一位外部接一个按键.如果按键按下,让其它口如P4口的某一位输出一个高电平是可以实现的。
先睡啦。看明天有没有那位高手能帮我看看是那里的问题!!! 回复【3楼】zlng
-----------------------------------------------------------------------
当IO设为输入时用万用表测量时有可能被万用表内部分压电阻拉低,所以你测出来才1.85V。而实际应该>=0.8VDD
页:
[1]