基于proteus的51单片机仿真
- 格式:doc
- 大小:265.00 KB
- 文档页数:6
基于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中,启动仿真,观察运行结果。下图是程序运行结果