|
网上买了这种简单的开发板,按店家提供的资料和网上的贴子自己学着编程,请大家指出不足之处,谢谢!
用的这种简单的开发板,IC型号是STC89C52
.
用的电脑是这台老掉牙的小本本,
本次的任务是用4位数码管和定时器实际0000-9999累加循环显示。
- #include <reg52.h>
- #define uchar unsigned char //宏定义,意思就是用char 代替unsigned char 相当于缩写的意思了,
- #define uint unsigned int
- sbit a = P1^0; //位定义,表示个位数码管的位,以下是十位,百位,千位
- sbit b = P1^1;
- sbit c = P1^2;
- sbit d = P1^3;
- // 数码管的编码,抄来的,没去深究
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- uint num=0; //定义变量,并给初值,如果不给初值,是不是默认就是0?num就是要显示的数
- uint xms; //表示延时
- uchar shi=0;
- void display(num); //定义显示函数,如果函数写在main前可以不定义,写在main后要先定义,我发现有些函数括号内有变量,有些没有,有什么不同?不懂
- void delay(xms); //定义延时函数,
- void main ()
- {
- TMOD=0X01; //定时器模式1
- TH0=(65536-50000)/256; //高8位初值,为什么是这样也不懂,抄来的
- TL0=(65536-50000)%256; //低8位初值
- EA=1; //总中断
- ET0=1; //定时器0
- TR0=1; //开定时器0
- while(1)
- {
- display(num); //主循环,就一个任务,显示
- }
- }
- void display(num) //显示子函数,利用发光残留和人眼视觉误差,每次开一个数码管,显示完了再开另一个,看起来就是4个一起亮。
- {
- a=0; //开个位位选
- P0=table[num%10]; //送段选值 %表示求余,如123%10 除10后余3 就只显示3
- delay(5); //延时,如果延时用10,就能看到明显闪
- a=1; // 关个位位选
- b=0;
- P0=table[num/10%10];
- delay(5);
- b=1;
-
- c=0;
- P0=table[num/100%10];
- delay(5);
- c=1;
- d=0;
- P0=table[num/1000%10];
- delay(5);
- d=1;
- }
- void delay(xms)
- {
- uchar i;
- while(xms--)
- {
- for(i=0;i<113;i++); //先给初值,然后判断,如果条件符合就执行,再回到判断,如果不符合就跳出语句
- }
- }
- void jishu ()interrupt 1 //定时器中断函数
- {
- if(shi==10) //定时器满了10次就执行一次中断
- {
- shi=0; //从新开始
- num++; // 要显示的数加1
- if(num==10000) //要显示的数上限,我试过,如果不设上限,到了9999后会显示一些乱码,为什么我也不知道
- {
- num=0;
- }
- }
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- shi++;
- }
复制代码
没有系统的学习过,好些都很难理解,开发板的好处就是可以不断的尝试,谢谢大家
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|