03-共阳极数码管的静态显示

共阳数码管的静态显示

20231003163444

由电路图可知此为共阳数码管

copy
#include <REGX52.H> unsigned int code num[16] ={ 0xc0, // 0 1100 0000 0xf9, // 1 1111 1001 abged 为0 0xa4, // 2 1010 0100 0xb0,//3 0x99,//4 0x92,//5 0x82,//6 0xf8,//7 0x80,//8 0x90,//9 0x88,//A 0x83,//B 0xc6,//C 0xa1,//D 0x86,//E 0x8e,//F }; // 以毫秒级别的倍数减少 void Delay(unsigned int xms) { //while(t--); //while(t--); unsigned int i,j; for(i = 0; i < xms;i++) { for(j = 0;j < 299; j++); } } void _74HC138(unsigned char n) { switch(n) { case 4: // LED使能 P2 = (P2 & 0x1f) | 0x80; // 1000 0000 break; case 5: // 蜂鸣器和继电器使能 P2 = (P2 & 0x1f) | 0xa0; // 1010 0000 break; case 6: // 数码管位选使能 P2 = (P2 & 0x1f) | 0xc0; // 1100 0000 break; case 7: // 数码管段选使能 P2 = (P2 & 0x1f) | 0xe0; // 1110 0000 break; case 0: P2 = (P2 & 0x1f) | 0x00; // 1110 0000 break; } } void SystemInit(void) { _74HC138(5); P0 = 0x00; _74HC138(4); P0= 0xff; } void showSMG_Bit(unsigned char dat,pos) { _74HC138(6); // 数码管位选使能 P0 = 0x01 << pos; // 0x01 << 0000 0001 _74HC138(7); // 数码管段选使能 P0=dat; } void SMG_Static(void) { unsigned char i,j; for(i=0;i<8;i++) { for(j =0;j<10;j++) { // 参数1段选 参数2位选 showSMG_Bit(num[j], i); Delay(500); } } for(i=0;i<16;i++) { _74HC138(6); // 数码管位选使能 P0 = 0xFF; _74HC138(7); P0=num[i]; Delay(4000); } } void main(void) { unsigned char i,j; SystemInit(); // 调用该函数可实现上述功能 SMG_Static(); // 第二种方法 for(i=0;i<8;i++) { _74HC138(6); // 数码管位选使能 P0=0x01<<i; // 从左往右依次点亮 0000 0001 => 0000 0010 =>以此类推 for(j =0;j<10;j++) { _74HC138(7); P0=num[j]; Delay(500); } } _74HC138(6); P0 = 0XFF; // 位选全部点亮 for(i=0;i<16;i++) { _74HC138(7); P0=num[i]; Delay(4000); } }
posted @   夏日清凉~  阅读(118)  评论(0编辑  收藏  举报
相关博文:
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起