一个单片机实验,急急急,好心人帮帮MM啊

kiny   2008-5-15 21:30 楼主
1.        显示部分电路
   本实验仪的LED显示电路和键盘电路如图1。显示控制的位码由74HC374输出,经MC1413反向驱动后,做LED的位选通信号。位选通信号也可做为键盘列扫描码,键盘扫描的行数据从74HC245读回,374输出的列扫描码经245读入后,用来判断是否有键被按下,以及按下的是什么键。如果没有键按下,由于上拉电阻的作用,经245读回的值为高,如果有键按下,374输出的低电平经过按键被接到245的端口上,这样从245读回的数据就会有低位,根据374输出的列信号和245读回的行信号,就可以判断哪个键被按下。LED显示的段码由另一个74HC374输出。
   键盘和LED显示的地址译码见下图,做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。位码输出的地址为0X002H,段码输出的地址为0X004H,键盘行码读回的地址为0X001H,此处X是由KEY/LED CS 决定,参见地址译码。例如将KEY/LED CS接到地址译码的CS0上,那么位码输出的地址就为08002H,段码输出的地址就是08004H,键盘行码读回的地址为08001H。

图1: 键盘及LED显示电路
2.        译码电路

CS0        08000H~08FFFH
CS1        09000H~09FFFH
CS2        0A000H~0AFFFH
CS3        0B000H~0BFFFH
CS4        0C000H~0CFFFH
CS5        0D000H~0DFFFH
CS6        0E000H~0EFFFH
CS7        0F000H~0FFFFH

即高位地址由3-8译码器输出为cs0-cs7.

实验要求:
1.        按照电路图给出的电路,正确设计链接显示电路。即,选择合适的cs和相应的374的选择端联接。
2.        按照上课讲到的方法,设计一套c语言代码,使用定时计数器中断完成一个给定的全局数组的扫描显示。
3.        程序画出流程图,并提交实验报告,报告中有源程序。

回复评论 (10)

留个联系方式看看
点赞  2008-5-15 21:43

怎么球帮助,下东西还要积分啊...
点赞  2008-5-16 10:36
邮箱是shuangfeng_yang@yahoo.com.cn
非常感谢,因为我不喜欢硬件方面的东西,所以这门课学的并不好,万分感激
点赞  2008-5-16 10:41
看样子是学生,看样子是做课程设计。看样子这忙不该帮呀,老大
点赞  2008-5-16 17:52
俺做出来了,呵呵。只是自己不会编写函数啊,而且本MM又很讨厌硬件方面的东西哦,没办法。。。。。
点赞  2008-5-17 22:22
你是mm吗
是mm才帮
点赞  2008-5-19 16:45

8楼 gga 

这东西不难,不过发个照片先。确认身份后,单身的大侠才会出手的。
点赞  2008-5-21 11:11
这里我写了一个程序,跟你的电路差别不大,你自己看看再修改一下吧
[code]
/***************************************************************************************
*
*函数功能:4*4矩阵键盘扫描--行扫描法
*功能描述:有键按下键码返回为keycode[i *4 + j],没有键按下则返回-1,按键没有松开也返回-1
*内部变量:i--行值,j--列值,VALUE--键盘读入数据,null--连击标志
*输入参数:无
*输出参数:keycode[i *4 + j]
*
**************************************************************************************/
#include "stc.h"
#include "stdio.h"
#include "absacc.h"
#define uchar unsigned char
#define uint unsigned int
#define key_interface XBYTE[0x6000]//键盘接口

unsigned char code keycode[16] = { 0x01,0x02,0x03,0x0f,//自定义键盘编码
                                        0x04,0x05,0x06,0x0e,
                                   0x07,0x08,0x09,0x0d,
                                   0x0a,0x00,0x0b,0x0c};
//键盘扫描函数------行列反转法-------//
uchar keyboard(void)
{
       unsigned char i,j,VALUE;//行扫描值,列扫描值,键值
        static bit null = 0;//连击标志
        for(i = 0;i < 4;i ++)
       {
              key_interface = 0xf7 >> i;//输出扫描行
                if((VALUE = key_interface & 0xf0) != 0xf0)break;//读入扫描列
        }
        if((~VALUE & 0xf0) == 0)//没有按键按下返回 -1,同时清除连击标志位
        {
                null = 0;
                return(-1);
        }
        if(null == 1)return(-1);//按键被连击,返回 -1
        for(j = 0;j < 4;j ++)
                if(((VALUE << j) & 0x80) == 0)break;
        null = 1;//有键盘被按下,确定连击标志
        return(keycode[i * 4 + j]);//返回按键编码
}
void delay_key(void)
{
        int i;
        for(i = 0;i < 250;i ++);
}
char scanf(void)
{
        uchar get_char;
        char gnull;
        get_char = keyboard();
        if(get_char == -1)return(-1);
        else
        {
            delay_key();
            gnull = keyboard();
            if((gnull == -1) && (get_char != -1))return(get_char);
            else
                return(-1);
        }
}
点赞  2008-5-23 12:33
路过
点赞  2008-5-24 23:51
自称MM恐怕是赝品!
点赞  2008-5-25 09:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复