C51单片机学习(一):LED和数码管静态显示

2019-04-15 17:02发布

前言

最近在学习C51单片机,我的开发板是TX-1C,看的视频是郭天祥。写这个原因一则是温故而知新,二则自己写程序的时候老是忘记比如中断初始化要控制那些位,以后方便自己查询^-^。

LED

LED图
其中74HC573功能表:
74HC573功能表
从两图中可以知道:OE置L,LE置H,输入和输出一样(89C52芯片周围的引脚默认为高电平)只要将P1口中对应的引脚置为0,LED灯就会亮 #include sbit led = P1 ^ 0; //sbit 可以进行位操作其中'^' //后面接的数表示控制了前面(P1) //的第几位,也可直接 比如P1 = 0xf0 //将LED 1,2,3,4点亮 void main(){ while(1){ led = 0; } }

数码管静态显示

数码管接口
说明:通过对P0控制wela,选择要显示哪几个数码管,将wela = 0,锁存住前面的信息,然后打开dula,因为是共阴极所以只要使得相应的那一位为1就显示。
这里写图片描述
比如上图abcdef = 1 其余为0,就显示出0 //控制前三位从0x0到0xf循环 #include #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; uchar num; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //code的作用是告诉单片机,定义的数据要放在ROM(程序存储区)里面 void delay(uint z); void main() { wela=1;//选择要打开哪几个数码管显示 P0=0xf8;//0xf8 == 11111000B 就是第1,2,3位打开 wela=0;//根据74HC573可知,这样输出的数据都是之前的,即锁存住了前面的值 while(1){ dula=1; P0=table[(num ++) % 16]; dula=0; delay(1000); //延时函数 } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

总结

没啥好总结的:-),入坑51单片机最简单的两个案例。