电子工程设计Ⅱ实验报告 120231班14组
unsigned char i,num=0; Init_Device(); DP1=DP2= DP3=DP4=0xff; while(1) {
for(num=0;num<10;++num)
{
i++;
if(i<=4) display(i,num); else { i=1; display(i,num);} delay( ); } } }
在使用了这个程序之后发现,显示模块出现了问题,于是在张老师的帮助下,帮我们修改了程序,这才在一周实验的最后结尾部分查出了问题。程序如下: #include \#include \
#include \
#define DP1 XBYTE[0x0000] #define DP2 XBYTE[0x0001] #define DP3 XBYTE[0x0002] #define DP4 XBYTE[0x0003] #define TIMER 0x8000 #include \
unsigned char data table1[]={0x10,0xF9,0x0A,0x09,0xE1,0x05,0x04,0xD9,0x00,0x01}; unsigned char data table2[]={0x04,0xAF,0xC0,0x82,0x23,0x12,0x10,0x8F,0x00,0x02}; unsigned char data table3[]={0x40,0xF5,0x82,0x81,0x31,0x09,0x08,0xE5,0x00,0x01}; unsigned char data table4[]={0x04,0xEE,0x58,0x4A,0xAA,0x0B,0x01,0x6E,0x00,0x02}; void display(unsigned char x,unsigned char y) {
DP3=table3[x]; DP4=table4[y]; }
void main(void) { unsigned char l_val,r_val,r_state,temp,conter,x,c;
15
电子工程设计Ⅱ实验报告 120231班14组
int key;
DP1=DP2=DP3=DP4=0xff; Init_Device(); while(1) {
key=0x0004;
for(x=1;x<5;x++,key++) {
c=XBYTE[key];
if(r_state=~c&0x1f) { for(conter=1,temp=0x01;conter<6;++conter,temp=temp<<1) if((r_state&temp)!=0) { r_val=conter; l_val=x;
display(l_val,r_val); } } } } }
(2)显示模块故障检测方法:
运行显示模块测试程序,如果电路工作正常,在4个数码管上应有数字 0-9 滚动显示。否则,说明电路存在故障,可以根据故障现象,按照下面的方法进行检查。
全黑:数码管未接电源, 74LS237未接电源或地, 74LS237触发控制信号(CK)不正常, 数据线全部漏接
全亮:74LS237的CLR引脚未接高电平
,乱显示且无规律、无变化:74LS237触发控制信号(CK)不正常 二次译码信号线上无信号:一次译码信号线漏接或信号线上无信号, 二次译码电路74LS138的E2、E3连接错误, 二次译码电路74LS138漏接电源或地线, 地址信号( 74LS138 的A、B、C输入)不正常, 访问地址错误
2.3.4键盘模块的调试
运行键盘控制电路的测试程序,如果电路工作正常,在键盘上每按 1 个键,都会通过 2 位数码显示管,显示相应的行编码和列编码。否则,说明电路存在
16
电子工程设计Ⅱ实验报告 120231班14组
故障。
调试源程序如下 #include \#include \#include \
#define DP1 XBYTE[0x7000] #define DP2 XBYTE[0x7100] #define DP3 XBYTE[0x7200] #define DP4 XBYTE[0x7300] #define TIMER 0x8000 #include %unsigned
char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void display(unsigned char x,unsigned char y) { DP3=table[x]; DP4=table[y]; }
void main(void){
unsigned char l_val,r_val,r_state,temp,cont,x,c; int key;
DP1=DP2=DP3=DP4=0xff; Init_Device(); while(1){ key=0x0004;
for(x=1;x<5;x++,key++) { c=XBYTE[key]; if(r_state=~c&0x1f) {
for(cont=1,temp=0x01;cont<6;++cont,temp=temp<<1)
if((r_state&temp)!=0) {
r_val=cont;
l_val=x;
17
电子工程设计Ⅱ实验报告 120231班14组
display(l_val,r_val); } } } } }
用此程序我们发现虽然显示部分已经没问题了,但是键盘部分又出现了问题,幸好有张老师的帮助,老师在百忙之中帮我们修改程序,检查问题,之后我又细细检查电路,发现是由于抄写电路图时的粗心,导致线路接错。
调试时修改的程序如下:
#include \#include \
#include \
#define DP1 XBYTE[0x0000] #define DP2 XBYTE[0x0001] #define DP3 XBYTE[0x0002] #define DP4 XBYTE[0x0003] #define TIMER 0xff #include \
unsigned char data table1[]={0x10,0xF9,0x0A,0x09,0xE1,0x05,0x04,0xD9,0x00,0x01}; unsigned char data table2[]={0x04,0xAF,0xC0,0x82,0x23,0x12,0x10,0x8F,0x00,0x02}; unsigned char data table3[]={0x40,0xF5,0x82,0x81,0x31,0x09,0x08,0xE5,0x00,0x01}; unsigned char data table4[]={0x04,0xEE,0x58,0x4A,0xAA,0x0B,0x01,0x6E,0x00,0x02}; void delay(void);
void display(unsigned char x,unsigned char y); void main(void) {
unsigned char i=0,num=0; Init_Device(); //while(1)
DP1=DP2=DP3=DP4=0xff; while(1) { for(num=0;num<9;++num) { i++; if(i<=4) display(i,num); else { i=1; display(i,num); } delay( ); delay( ); delay( );
18
电子工程设计Ⅱ实验报告 120231班14组
delay( ); } } }
void display(unsigned char x,unsigned char y) {
if(x==1) DP1=table1[y];
else if(x==2) DP2=table2[y]; else if(x==3) DP3=table3[y]; else DP4=table4[y]; }
void delay(void) {
unsigned char data i,j; for(i=0;i } 2.4数/模(D/A)转换电路设计与实现 2.4.1基本要求: 输入范围: 00H ~ 0FFH 对应输出: -10V~+10V 误差: 1%FSR 响应时间: < 1ms 电源供电: +5V,±12V 安装: 独立电路板结构 2.4.2设计方案 D/A的作用是把输入的模拟信号转化为数字信号。有电流开关型、脉宽调制型等。在这里,我们采用DAC0832构成D/A电路。 DAC0832是8 位乘算型电流输出的典型产品,具有MCU兼容接口,使用方便,价格低,能满足设计要求。数模转换器是整个控制系统将计算机输出的数字信号转化成模拟信号的重要部件,它的特性直接影响温度转换的精度。其转换的精度主要由数模转换器的位数和Vref。 DAC0832工作原理及特性如图2.13所示: 19