搜索
bottom↓
回复: 4

用78f9234 控制LED灯!!

[复制链接]

出0入0汤圆

发表于 2011-2-27 23:48:09 | 显示全部楼层 |阅读模式
用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 LED  P4_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。

出0入0汤圆

发表于 2011-2-28 16:00:08 | 显示全部楼层
有些问题:
1,按键是哪个口输入的?猜测是P4的某个口;
2,P4口的低位用于驱动LED指示灯,怎么还设置成输入的?灯应该乱亮吧;
3,按键电路是怎样的?

出0入0汤圆

 楼主| 发表于 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 K1  P0_bit.no0  
#define K2  P0_bit.no1  
#define k3  P0_bit.no2  
#define k4  P0_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);

}

出0入0汤圆

 楼主| 发表于 2011-3-2 02:33:54 | 显示全部楼层
注!就算才是1.85V,但是PO口是可以检测到输入的,就是说我如果把PO口某一位外部接一个按键.如果按键按下,让其它口如P4口的某一位输出一个高电平是可以实现的。

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

出0入0汤圆

发表于 2011-4-3 03:44:08 | 显示全部楼层
回复【3楼】zlng
-----------------------------------------------------------------------

当IO设为输入时用万用表测量时有可能被万用表内部分压电阻拉低,所以你测出来才1.85V。而实际应该>=0.8VDD
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 03:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表