求各位大神解决单片机程序C语言代码跟解释

11.数码管显示要求:系统正常运行后,数码管第一位(其它三位不显示)加1显示(直至9蜂鸣器响一下,同时清0)。12.LED控制任务要求:编写程序控制实现实训板上的任意四只LED按以下规律... 11.数码管显示 要求:系统正常运行后,数码管第一位(其它三位不显示)加1显示(直至9蜂鸣器响一下,同时清0)。 12.LED控制 任务要求:编写程序控制实现实训板上的任意四只LED按以下规律亮灭,当系统运行后,自动循环操作(延时时间不作要求,但要能看清状态变换)。 求解 高分 展开

第1个回答  2020-03-14
11.程序如下:
#include<reg52.h>
//包含单片机寄存器的头文件
#include<intrins.h>
#define
uchar
unsigned
char
//定义一下方便使用
#define
uint
unsigned
int
//定义一下方便使用
uchar
num,num1;
uchar
code
table[]={
//数字编码0~9
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
void
main()
//主程序
{
TMOD=0x01;
//定时器T0,工作方式1
TH0=(65536-50000)/256;
//装载初值,中断一次50ms
TL0=(65536-50000)%256;
EA=1;
//开总中断
ET0=1;
//开T0中断
TR0=1;
//启动定时器
while(1)
//大循环
{
P2=0xaa;
//数码管位选,10101010b
P0=table[num];
//段选信号
}
}
void
T0_time()
interrupt
1
//中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num1++;
if(num1==20)
//中断20次为1秒
{num1=0;
num++;
//每1秒加1
if(num==10)
//数码管显示的编码0~9
ET0=0;
for(int
i=0;i<10000;i++)
{
P1=0xff;
delay();
P1=0xfe;
delay();
}
num=0;
}
}
void
delay()();
{
unsigned
char
i;
for(i=20;i>0;i--);
}
12.#include
<reg52.h>
#include
<intrins.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
void
DelayMS(uint
x)
{
uchar
t;
while(x--)
{
for(t=120;t>0;t--);
}
}
void
main()
{
uchar
i;
P2=0x01;
while(1)
{
for(i=7;i>0;i--)
{
P2=_crol_(P2,1);
DelayMS(150);
}
for(i=7;i>0;i--)
{
P2=_cror_(P2,2);
DelayMS(150);
}
}
}