单片机 c/c++ 嵌入式 郭天祥《新概念51单片机C语言教程 入门 提高 开发拓展》
书籍page75在实验板上完成如下功能:用定时器0的方式1实现第一个发光管以200ms间隔闪烁,用定时器1实现数码管前两位59s循环计时。代码如下:#include<re...
书籍 page 75 在实验板上完成如下功能:用定时器0的方式1实现第一个发光管以200ms间隔闪烁,用定时器1实现数码管前两位59s 循环计时。代码如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula = P2^6; //申明U1锁存器的锁存端
sbit wela = P2^7; //申明U2锁存器的锁存端
sbit led1 = P1^0;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c
0x39,0x5e,0x79,0x71} ;
void delayms(uint);
void display(uchar,uchar);
uchar num,num1,num2,shi,ge;
void main()
{
TMOD = 0X11; //设置定时器0和1为工作方式1(00010001)
TH0 = (65536-45872)/256; //装初值
TL0 = (65536-45872)%256;
TH1 = (65536-45872)/256; //装初值
TL1 = (65536-45872)%256;
EA =1; //开总中断
ET0=1; //开定时器0中断
ET1=1; //开定时器1中断
TR0=1; //启动定时器0
TR1=1; //启动定时器1
while(1) //程序在这里不停地对数码管动态扫描同时等待中断发生
{
display(shi,te);
}
}
void display(uchar shi,uchar ge) //显示子函数
{
dula = 1; // 此处有问题
P0 = table[shi]; //送段选函数
dula = 0;
P0 = 0xff; //送位选数据前关闭所有显示,防止打开位选锁时候
wela = 1;
P0 = 0xfe; //送位选数据
wela = 0;
delayms(5); //延时
dula = 1; //此处有问题
P0 = table[ge];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfd; //送位选数据
wela = 0;
delayms(5); //延时
}
/*******************************/
问题;函数display 中的 “dula = 1;”语句在这里起什么作用,有没有多此一举?
如果不写这一句直接从接下来的一句写起多程序有没有影响?(本人没有电路板,所以无法自己动手做这个实验)
/******************************/
跪求答案,请前辈指点,谢谢!!!!
后面很多代码都省去了,我只写了前面对我问题有作用的代码 展开
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula = P2^6; //申明U1锁存器的锁存端
sbit wela = P2^7; //申明U2锁存器的锁存端
sbit led1 = P1^0;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c
0x39,0x5e,0x79,0x71} ;
void delayms(uint);
void display(uchar,uchar);
uchar num,num1,num2,shi,ge;
void main()
{
TMOD = 0X11; //设置定时器0和1为工作方式1(00010001)
TH0 = (65536-45872)/256; //装初值
TL0 = (65536-45872)%256;
TH1 = (65536-45872)/256; //装初值
TL1 = (65536-45872)%256;
EA =1; //开总中断
ET0=1; //开定时器0中断
ET1=1; //开定时器1中断
TR0=1; //启动定时器0
TR1=1; //启动定时器1
while(1) //程序在这里不停地对数码管动态扫描同时等待中断发生
{
display(shi,te);
}
}
void display(uchar shi,uchar ge) //显示子函数
{
dula = 1; // 此处有问题
P0 = table[shi]; //送段选函数
dula = 0;
P0 = 0xff; //送位选数据前关闭所有显示,防止打开位选锁时候
wela = 1;
P0 = 0xfe; //送位选数据
wela = 0;
delayms(5); //延时
dula = 1; //此处有问题
P0 = table[ge];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfd; //送位选数据
wela = 0;
delayms(5); //延时
}
/*******************************/
问题;函数display 中的 “dula = 1;”语句在这里起什么作用,有没有多此一举?
如果不写这一句直接从接下来的一句写起多程序有没有影响?(本人没有电路板,所以无法自己动手做这个实验)
/******************************/
跪求答案,请前辈指点,谢谢!!!!
后面很多代码都省去了,我只写了前面对我问题有作用的代码 展开
3个回答
展开全部
楼上说的是正确的,就锁存器这个概念我简单的跟你说一下,不用这句是完全可以的,这个只是天祥的实验班,为了复用IO而加的,你就把它理解成一个开关的作用,dula = 1打开,开关数据就能过去,实质上控制显示并不需要锁存器,对于学习而言开发板,是必须有的,要买或者自己搭,推荐买一个开发板,51的开发板并不贵,也有51的仿真软件,但是仿真并不能代替实际的硬件电路,即使你仿真上能运行,在实际开发产品中也许并不能运行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以用proteus单片机仿真软件和Keil软件,联合仿真,进行各种尝试,表达你的想法,很强大的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询