新浪博客

天津科技大学嵌入式系统概论课程设计答辩题目及答案

2017-01-04 09:33阅读:
这是自己做的答案,仅供参考
1. 如何控制点阵屏上的一个LED灯的亮灭
其行对应的值为1,其列对应的值为0

2.CD4094CLK信号有什么作用?该信号与S3C2410的哪个引脚相连接?
允许串行输入的数据发生变化(输入使能)GPD10

3.CD4094OLE信号有什么作用?该信号与S3C2410的哪个引脚相连接?
锁存的并行数据输不输出(输出使能)GPB5

4.为了控制CD4094的串入并出,S3C2410使用到的通用端口有GPIOB4/5,GPIOC0/7,GPIOD10,GPIOG8,如何对这些端口进行初始化
?
设为输出01
上拉失效FF

5.CD4094STR信号有什么作用?该信号与S3C2410的哪个引脚相连接?
行列锁存允许,将串行数据打入到CD4094相应位 GPB4 GPG8

6. 一个16×8的字型码一共需要多少字节来存储,两个16×8字符如何得到显示缓冲区的显示码?
128 第一个字符8的前8个字节 组成显示缓冲区的前8个字节,第二个字符8的前8个字节 组成显示缓冲区的前8-16个字节,第一个字符的前8-16个字节 组成显示缓冲区的前16-24个字节,第二个字符的前16-24个字节 组成显示缓冲区的前24-32个字节,依次类推

7.如何实现字符的动态流动显示?
从上到下逐次不断的显示各行进行选通,同时又向各列送出表示图形或文字的列数据信号

8.程序中为什么对行驱动数据和列驱动数据进行取反写入CD4094?
点阵屏中LED的点亮需要一定的电位差,CD4094输出的高电平不足以达到这个水平,需要放大,其使用的放大电路是反向放大器,要达到正确的结果,数据在进入CD4094前需要取反,在与其加反相电路增加硬件开销,不如通过软件对输入取反

9.如何实现字符的反向流动?以具体程序加以说明

10.如何从串口输入字符串到数组存放?简单说明程序流程
char cInput[256]; char c; int i =0;
while(1)
{ c=uart_getch();
if(c!='\r')cInput[i++]=c;
else
{cInput[i]='\0';break;}
}

11.若采用串口中断方式进行字符输出,请说明如何进行初始化,中断服务程序如何改动
12 .sys_init.c最主要的目的是什么,程序中使用到了哪些硬件设备初始化程序?
为程序提供硬件支持;设定波特率、时钟频率、端口初始化、中断初始化、串口初始化

13.如何保证所显示的字符不闪烁?若要是显示的字符不断的闪烁,怎么实现

14. 结合CD4094,若要显示2个字符而且采用行扫描方式,则先输入的左边的列数据字型码还是先输入右边的列数据字型码呢?为什么?
左,显示缓冲区是从左向右刷新的

15.在32*16矩阵上的若要显示4个字符,也就是显示2行,有什么办法可以实现多行显示?
16.一个汉字在内存中占几个存储空间,怎么判断输入的是字符还是汉字?
两个字节 其机器码>=0xa1是汉字
17.如何初始化中断服务程序的入口?
18.显示缓冲区一共占多少个存储空间,如何更新显示缓冲区?(请指明算法或源代码)
16*8*2=256字节
static void refresh_l_display_array(u8 bits, u8 *str)
{u32 i;u32 remaining_bits = 8-bits;
for(i=0;i<16;i++)
{l_display_array[2*i] = (*str<<bits) |(*(str+16)>>remaining_bits);
l_display_array[2*(i+1)-1] = (*(str+16)<<bits) |(*(str+32)>>remaining_bits);
str++;}}
19.显示缓冲区和ASCII码缓冲区有什么区别?如何用ASCII码缓冲区更新显示缓冲区?
显示缓冲区256字节ASCII码缓冲区384字节显示缓冲区是ASCII码缓冲区的前两块
static void refresh_assic_buffer(u8 *str)
{copy_data(&assic_buffer[0], &assic_buffer[16],16);
copy_data(&assic_buffer[16], &assic_buffer[32],16);
copy_data(&assic_buffer[32], str,16);
l_display_scroll(assic_buffer);}
20.如何调整行扫描的速度?
static void l_display_scroll ( u8 *str ) / /在循环中加入延时即可减慢
{int i;for(i=0;i<8;i++)
{refresh_l_display_array(i, str);
led_update();} }
21.请简述将16位行数据打入CD4094的过程?
S3c2410使用串口输入到CD4094,通过CLK信号依次将数据输入到不同的管脚
22.如何依据汉字的机内码找到该汉字的点阵码的首地址?
以其机内码与首个汉字的机内码的差值*点阵码的长度作为首个汉字的点阵码的首地址与该汉字的点阵码的首地址的距离
23.如何从串口得到一个字符?
char uart_getch(void)
{ if(f_nWhichUart==0) //以串口0为例
{while(!(rUTRSTAT0 & 0x1));
return RdURXH0(); }
return NULL;}
24.请说明当刷新第4行所有列数据的,行驱动数据是什么?
00010000
25.输入一个字符,如何得到该字符的点阵码首地址?
把该字符的ASCII码与空格的ASCII码的差值*点阵码长度作为该字符的点阵码首地址与空格点阵码的首地址的距离。
26.如果一个C文件要用另一个C文件定义的变量,请提出解决办法?
包含该全局变量所在的头文件,并在使用变量的上方加入外部引用声明: extern '变量' 即可
27.如何清除LED点阵屏的信息?也就是什么也不显示?
28.请查阅资料,找到外部中断8的中断向量地址
(*(unsigned *)(_ISR_STARTADDRESS+0x34))
29.如何确定从串口输入的是字符还是汉字,请用文字或者代码进行说明?
char c;c=uart_getch();
if(c>=0xa1) uart_printf(“是汉字”);
else uart_printf(“不是汉字”);
30.已知#define Lstr_H rGPBDAT |= 0x10代码,请确定Lstr_HS3C2410哪个引脚相连?
GPB4

我的更多文章

下载客户端阅读体验更佳

APP专享