数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2298|回复: 15

[C51] 小白自学C51单片机编程,请大家指出不足之处

[复制链接]
发表于 2023-12-19 11:18:50 | 显示全部楼层 |阅读模式
网上买了这种简单的开发板,按店家提供的资料和网上的贴子自己学着编程,请大家指出不足之处,谢谢!
用的这种简单的开发板,IC型号是STC89C52
.

用的电脑是这台老掉牙的小本本,



本次的任务是用4位数码管和定时器实际0000-9999累加循环显示。

  1. #include <reg52.h>
  2. #define uchar unsigned char  //宏定义,意思就是用char 代替unsigned char 相当于缩写的意思了,
  3. #define uint unsigned int

  4. sbit a = P1^0;  //位定义,表示个位数码管的位,以下是十位,百位,千位
  5. sbit b = P1^1;
  6. sbit c = P1^2;
  7. sbit d = P1^3;
  8. // 数码管的编码,抄来的,没去深究
  9. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

  10. uint num=0;    //定义变量,并给初值,如果不给初值,是不是默认就是0?num就是要显示的数
  11. uint xms;  //表示延时
  12. uchar shi=0;  

  13. void display(num);  //定义显示函数,如果函数写在main前可以不定义,写在main后要先定义,我发现有些函数括号内有变量,有些没有,有什么不同?不懂
  14. void delay(xms); //定义延时函数,

  15. void main ()
  16. {
  17.      TMOD=0X01; //定时器模式1
  18.     TH0=(65536-50000)/256;  //高8位初值,为什么是这样也不懂,抄来的
  19.     TL0=(65536-50000)%256; //低8位初值
  20.     EA=1;  //总中断
  21.     ET0=1; //定时器0
  22.     TR0=1;  //开定时器0
  23.     while(1)
  24.     {
  25.         display(num);  //主循环,就一个任务,显示
  26.     }
  27. }

  28. void display(num)  //显示子函数,利用发光残留和人眼视觉误差,每次开一个数码管,显示完了再开另一个,看起来就是4个一起亮。
  29. {
  30.       a=0;   //开个位位选
  31.      P0=table[num%10];  //送段选值 %表示求余,如123%10 除10后余3 就只显示3
  32.      delay(5);  //延时,如果延时用10,就能看到明显闪
  33.      a=1;  // 关个位位选

  34.      b=0;
  35.      P0=table[num/10%10];
  36.      delay(5);
  37.      b=1;

  38.      c=0;
  39.      P0=table[num/100%10];
  40.      delay(5);
  41.      c=1;

  42.      d=0;
  43.      P0=table[num/1000%10];
  44.      delay(5);
  45.      d=1;
  46. }


  47. void delay(xms)
  48. {
  49.      uchar i;
  50.     while(xms--)
  51.     {
  52.          for(i=0;i<113;i++);  //先给初值,然后判断,如果条件符合就执行,再回到判断,如果不符合就跳出语句
  53.     }
  54. }


  55. void jishu ()interrupt 1 //定时器中断函数
  56. {   
  57.      if(shi==10)  //定时器满了10次就执行一次中断
  58.     {        
  59.          shi=0;  //从新开始
  60.         num++;  // 要显示的数加1
  61.         if(num==10000)  //要显示的数上限,我试过,如果不设上限,到了9999后会显示一些乱码,为什么我也不知道
  62.         {
  63.              num=0;
  64.         }
  65.     }
  66.     TH0=(65536-50000)/256;   
  67.     TL0=(65536-50000)%256;
  68.     shi++;
  69. }
复制代码

没有系统的学习过,好些都很难理解,开发板的好处就是可以不断的尝试,谢谢大家



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1家元 +15 收起 理由
不长叶子的树 + 15

查看全部打赏

发表于 2023-12-19 11:39:05 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-19 11:46:04 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-19 11:50:58 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-19 12:10:17 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-19 12:41:20 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-19 13:28:15 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-19 14:11:07 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-19 16:52:44 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-19 17:02:40 | 显示全部楼层
游客请登录后查看回复内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2023-12-19 17:12:47 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-19 19:44:07 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-20 09:50:01 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-20 11:06:01 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-22 10:08:07 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2023-12-22 15:01:47 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-6-13 21:37 , Processed in 0.748801 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

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