找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 914|回复: 2
打印 上一主题 下一主题
收起左侧

刚学单片机这个程序可以帮忙注释一下吗?

[复制链接]
跳转到指定楼层
楼主
ID:834445 发表于 2020-10-25 20:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
void delay7ms(void)   //误差 -0.217013888891us
{
    unsigned char a,b;
    for(b=208;b>0;b--)
        for(a=14;a>0;a--);
}
void delay2ms(void)   //误差 -0.217013888889us
{
    unsigned char a,b;
    for(b=80;b>0;b--)
        for(a=10;a>0;a--);
}

void main(void)
{
uint led[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint m,n=0,a=0;
for(m=0;m<=10;m++)
{
while(a<30)
  {
    if(m==10)
    {
  m=0;
     n++ ;
     if(n==10)
     n=0;
}
   P0=led[m];
   P2=0x40;
   delay7ms();
   P2=0x00;
   delay2ms();
   P0=led[n];
   P2=0x80;
   delay7ms();
   P2=0x00;
   delay2ms();

a++;
  }
   a=0;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:97554 发表于 2020-10-26 09:56 | 只看该作者
#include<reg52.h>     //头文件,没啥好说的。
#define uint unsigned int     //程序中用uint代替unsigned int,简化定义无符号整数型变量
void delay7ms(void)   //误差 -0.217013888891us   //延时函数,这个根据晶振计算,他这个误差不一定就准确。
{
    unsigned char a,b;
    for(b=208;b>0;b--)
        for(a=14;a>0;a--);
}
void delay2ms(void)   //误差 -0.217013888889us  //一样的延时函数,至于怎么延时,就是看下边的那个循环,计算a-十次,b-1次,就这样进行80次a-1减十次,也就是让CPU完成800次计算来打发时间,上边的一样,VIOD在具体使用中会换成整数值,与那800次相乘就是浪费的总共时间---延时。
{
    unsigned char a,b;
    for(b=80;b>0;b--)
        for(a=10;a>0;a--);
}



void main(void)   //主函数,程序从此开始。
{
uint led[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //做一个名字为led的数据表[10]表示这个表里总共有十个元素,确定里边元素的序号。第一个元素为0XC0   表示输出的时候PIO输出的1 1 0 0 0 0 0 0,依次。


uint m,n=0,a=0; // 定义m , n , a ,三个无符号整数型变量,且n,a初始值为0


for(m=0;m<=10;m++)     //m初始值为0,进行自加运算,和下边那句M==10 M=0那段一起表示,初始为0  依次+1,加到10了归0,也就是m从0--1.
{


while(a<30)
  {
    if(m==10)
    {
  m=0;     
     n++ ;
     if(n==10)
     n=0;
}

   P0=led[m];   //P0口依次取uint led[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 表里的十个数据,
   P2=0x40;      //P2口电平状况为 0 1 0 0 0 0 0 0   P2^6=1;
   delay7ms();   //延时
   P2=0x00;      //P2口电平全部为0
   delay2ms();   //延时
   P0=led[n];     //P0口依次取uint led[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 表里的十个数据,因为N也是从0--10,他是在M到10后开始从1开始数,也就是M显示完了开始显示N的数。
   P2=0x80;     //P2口电平为1 0 0 0 0 0 0 0         P2^7=1;
   delay7ms(); //延时
   P2=0x00;    //P2口全部置0.
   delay2ms();  //延时

a++;                    //a自加,这个变量定义的a最大值是30,所以,上边的显示循环30次   while(1)
  }
   a=0;      
}
}



回复

使用道具 举报

板凳
ID:387641 发表于 2020-10-26 11:27 | 只看该作者
#include<reg52.h>
#define uint unsigned int
void delay7ms(void)   //延时7m函数
{
    unsigned char a,b;
    for(b=208;b>0;b--)//循环208次
        for(a=14;a>0;a--);//循环4次
}
void delay2ms(void)   //延时函数
{
    unsigned char a,b;
    for(b=80;b>0;b--)//循环80次
        for(a=10;a>0;a--);//循环10次
}

void main(void) //运行主函数
{
uint led[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数组变量
uint m,n=0,a=0;};//变量

for(m=0;m<=10;m++) ;};//循环10次
{
while(a<30)//如果a大于30不运行括号内代号
  {
    if(m==10)
    {
  m=0;
     n++ ;
     if(n==10)
     n=0;
}
   P0=led[m];//P0=数组变量其中一个
   P2=0x40;//P2=0x40
   delay7ms();//延时
   P2=0x00;//
   delay2ms();//延时
   P0=led[n];//P0=数组变量其中一个
   P2=0x80;//
   delay7ms();//延时
   P2=0x00;
   delay2ms();//延时

a++; //A加1
  }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表