[学习单片机01]利用Protues 仿真C51单片机8位数码管
我找了许多有关模拟数码管的文章,但是大多数对新手都不太友好(可能是我理解能力不太好吧,哈哈),所以我开始尝试用博客来写笔记,话不多说,开始吧。
让我们找到元件
1. AT89C51芯片
- XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
- XTAL2:来自反向振荡器的输出。
- RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
2. 74HC573寄存器
- 保存收到的电位
3. CRYSTAL和两个CAP电容组成的晶体振荡器
- 晶体振荡器:提供系统所需的时钟频率
- CRYSTAL :晶体
- CAP:普通电容
4. RESPACK-8排阻(上拉电阻)
- P0端八个引脚输出电流太小 上拉电阻起到拉高电平的作用
5. 7SEG-MPX8-CC
- 8位7段码数码管,左面8个引脚分别是a 、b、 c 、d 、e、 f 、g 、dp(小数点),右面是8个数码管的位选端。例“1”号脚为正电位(共阳极),第一个数字显示7段码表示的数。
6. CAP-ELEC
- CAP-elec 电解电容,空心为正极,斜线填充为负极
7. RES电阻
- 就是普通的电阻
8.电源和接地线
- 点击这个图标
- 找到电源POWER 和接地线 GROUND
原理图
代码附上
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit wela = P2^7;
uchar num;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,//0~3
0x99,0x92,0x82,0xf8,//4~7
0x80,0x90,0x88,0x83,//8~b
0xc6,0xa1,0x86,0x8e //c~f
};
void delay()//延时函数
{
uint i = 0;
uint j = 0;
for(;i<9000;i++)
{
for(;j<20000;j++)
{}
}
}
void main()
{
wela = 1;//打开位选
P0 = 0xff;
//选择要亮的数码管 0xff = 11111111 即8个数码管全亮
//P0 = 0xa0 = 10100000 即只有第一个和第三个亮
wela = 0;//关闭位选 锁存器右端电位保持不变
while(1)
{
for(num=0;num<16;num++)//从0到f循环
{
d1 = 1;
P0 = table[num];
delay();
}
}
}