基于proteus的51单片机仿真

  • 格式:doc
  • 大小:265.00 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于proteus的51单片机仿真实例七十八、使用BCD译码器实现8位数码管显示应用实例

标签: proteus译码器单片机BCD数码管2010-02-24 16:57

1、在此前有关数码管显示的例子中,单片机必须要发送段码才能够让数码管显示正确的数字。

本例使用7段数码管显示译码器4511,单片机可以直接输出BCD码,4511能够自动将BCD 码转换为数码管的段码。

2、在keil c51中新建工程ex66,编写如下程序代码,编译并生成ex66.hex文件

//使用BCD码译码器控制数码管显示

#include

//位码表

unsigned char code bit_buff[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//需要显示的数字

unsigned char code bcd_buff[] = {2,0,1,0,10,2,10,9};

//延时函数

void delayms(unsigned int x)

{

unsigned char i;

while(x--)

{

for(i = 0;i < 120;i++);

}

}

void main(void)

{

unsigned char i;

while(1)

{

for(i = 0;i < 8;i++) //显示8位

{

P2 = bit_buff[i]; // 位码

P1 = bcd_buff[i]; //需要显示的数字,这里的数字不再是段码,而是BCD码

3、在proteus中新建仿真文件ex66.dsn,电路原理图如下所示

4、将ex66.hex文件载入at89c51中,启动仿真,按动拨码开关,观察运行结果。下图是某一时刻程序运行结果

基于proteus的51单片机仿真实例七十一、并口转串口器件74HC165应用实例

标签: proteus单片机口器实例并口2010-02-23 17:12

1、74HC165是一个8位并行输入/串行输出的器件。

根据该器件的真值表,可以了解其读取数据所需的时序

2、在keil c51中新建工程ex59,编写如下程序代码,编译并生成ex59.hex文件

// 8位并行输入/串行输出器件74HC165实例演示

#include // 包含头文件

sbit HC165_DATA = P2^0; // 定义串行数据端口

sbit HC165_SH = P2^1; // 定义数据锁存端口

sbit HC165_CLK = P2^2; // 定义串行时钟端口

// 延时函数

void delayms(unsigned int x)

{

unsigned char i;

while(x--)

{

for(i = 0;i < 120;i++);

}

}

// 主函数

void main(void)

{

unsigned char dat = 0,i,temp = 0x80;

P3 = 0xff; // 先熄灭所有LED

P2 = 0xff; // P2口输出高,当P2口做输入口时,要先输出1才能正确读取端口状态HC165_CLK = 0; // 串行时钟端口置0

HC165_SH = 0; // 锁存端口置0,读入8位并行数据

HC165_SH = 1; // 锁存端口置1,保持读入的数据

for(i = 0;i < 8;i++) // 依次读入8位数据

{

if(HC165_DATA) // 判断读取的是高电平还是低电平

{

dat = dat|temp; // 合并读取的位数据

HC165_CLK = 1; // 产生一个上升沿,串出下一个数据

temp = temp >> 1;

delayms(1);

HC165_CLK = 0;

delayms(1);

}

}

P3 = dat; // 获得的数据送P3口

delayms(500);

while(1);

}

3、在proteus中新建仿真文件ex59.dsn,电路原理图如下所示

4、将ex59.hex文件载入at89c51中,启动仿真,观察运行结果。下图是程序运行结果