设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码管初始值为0,9加1 后显示0)。
程序清单如下:
#include < reg51.h >// 51单片机头文件
#define uchar unsigned char // 宏定义,用uchar替代无符号字符型
#define uint unsigned int // 宏定义,用uint 替代无符号整数型
sbit Key = P2 ^ 7;
uchar Count = 0;
uchar code DataChar[10] = // 定义数码管的段码 '0'~'9'、'-'、' ' 'P'
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
};//延时N毫秒
void DelayNms( uint N ) // 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的
{
uint x,y;
for( x=N; x>0; x-- )
for( y=110; y>0; y-- );
}
//数码管显示 // 显示方式为动态扫描,视觉暂留原理
void Display( uchar Num ) // *p指向Main函数中的数组ShowNum的首地址
{
P0 = DataChar[ Num ]; // 向P0赋段码值
DelayNms(2); // 短暂的延时
P0 = 0x00; // 让数码管熄灭,否则会造成数字重叠
}
void main( void )
{
while(1)
{
if( Key == 0 )
{
DelayNms(30);
if( Key == 0 )
{
Count += 1;
Count = (Count>9)? 0 : Count;
}
while( !Key );
}
Display( Count );
}
}
扩展资料
8051单片机具有如下功能:
8位CPU·4kbytes程序存储器(ROM) (52为8K)
128bytes的数据存储器(RAM) (52有256bytes的RAM)
32条I/O口线·111条指令,大部分为单字节指令
21个专用寄存器
2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
一个全双工串行通信口
外部数据存储器寻址空间为64kB
外部程序存储器寻址空间为64kB
逻辑操作位寻址功能·双列直插40PinDIP封装
单一+5V电源供电
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。
参考资料来源:百度百科-51单片机
#include < reg52.h > // 嵌入51单片机头文件
#define uchar unsigned char // 宏定义,用uchar替代无符号字符型
#define uint unsigned int // 宏定义,用uint 替代无符号整数型
sbit Key = P2 ^ 7;
uchar Count = 0;
uchar code DataChar[10] = // 定义数码管的段码 '0'~'9'、'-'、' ' 'P'
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
};
//延时N毫秒
void DelayNms( uint N ) // 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的
{
uint x,y;
for( x=N; x>0; x-- )
for( y=110; y>0; y-- );
}
//数码管显示 // 显示方式为动态扫描,视觉暂留原理
void Display( uchar Num ) // *p指向Main函数中的数组ShowNum的首地址
{
P0 = DataChar[ Num ]; // 向P0赋段码值
DelayNms(2); // 短暂的延时
P0 = 0x00; // 让数码管熄灭,否则会造成数字重叠
}
void main( void )
{
while(1)
{
if( Key == 0 )
{
DelayNms(30);
if( Key == 0 )
{
Count += 1;
Count = (Count>9)? 0 : Count;
}
while( !Key );
}
Display( Count );
}
}