B站普中51单片机代码自敲打(一)
单片机扩展74HC165
1 #include <REGX52.H> 2 #include <INTRINS.H> 3 4 typedef unsigned int u16; 5 typedef unsigned char u8; 6 7 #define LED P0 8 9 sbit IN_PL = P1^6; 10 sbit IN_DATA = P1^7; 11 sbit SCK = P3^6; 12 13 14 15 u8 Read74HC165() 16 { 17 u8 indata; 18 u8 i; 19 20 IN_PL = 0; 21 _nop_(); 22 IN_PL = 1; 23 _nop_(); 24 25 indata = 0; 26 for(i = 0; i < 8; i++) 27 { 28 indata = indata << 1; 29 SCK = 0; 30 _nop_(); 31 32 indata |= IN_DATA; 33 SCK = 1; 34 } 35 return indata; 36 } 37 38 void main() 39 { 40 u8 h165Value; 41 LED = 0; 42 while(1) 43 { 44 h165Value = Read74HC165(); 45 if(h165Value != 0XFF) 46 { 47 LED = ~h165Value; 48 } 49 } 50 }
单片机扩展74HC595
1 #include <REGX52.H> 2 #include <INTRINS.H> 3 4 typedef unsigned int u16; 5 typedef unsigned char u8; 6 7 #define LED = P0 8 9 sbit RCLK1 = P3^5; 10 sbit SRCLK = P3^6; 11 sbit SER = P3^4; 12 13 14 void HC595SendByte(u8 dat) 15 { 16 u8 i; 17 for(i = 0; i < 8; i++) 18 { 19 SER = dat>>7; 20 dat <<= 1; 21 22 SRCLK = 0; 23 _nop_(); 24 _nop_(); 25 SRCLK = 1; 26 } 27 RCLK1 = 0; 28 _nop_(); 29 _nop_(); 30 RCLK1 = 1; 31 } 32 33 void delay(u16 i) 34 { 35 while(i--); 36 } 37 38 void main() 39 { 40 u8 LedNum; 41 LedNum = 0X01; 42 43 while(1) 44 { 45 HC595SendByte(LedNum); 46 LedNum = _crol_(LedNum,1); 47 delay(50000); 48 } 49 }
LED点阵(亮一个点)
1 #include <REGX52.H> 2 #include <INTRINS.H> 3 4 typedef unsigned int u16; 5 typedef unsigned char u8; 6 7 sbit SER = P3^4; 8 sbit RCLK1 = P3^5; 9 sbit SRCLK = P3^6; 10 11 void HC595SendByte(u8 dat1, u8 dat2, u8 dat3, u8 dat4) 12 { 13 u8 a; 14 SRCLK = 1; 15 RCLK1 = 1; 16 for(a = 0; a < 8; a++) 17 { 18 SER = dat1 >> 7; 19 dat1 <<= 1; 20 21 SRCLK = 0; 22 _nop_(); 23 _nop_(); 24 SRCLK = 1; 25 } 26 27 for(a = 0; a < 8; a++) 28 { 29 SER = dat2 >> 7; 30 dat2 <<= 1; 31 32 SRCLK = 0; 33 _nop_(); 34 _nop_(); 35 SRCLK = 1; 36 } 37 38 for(a = 0; a < 8; a++) 39 { 40 SER = dat3 >> 7; 41 dat3 <<= 1; 42 43 SRCLK = 0; 44 _nop_(); 45 _nop_(); 46 SRCLK = 1; 47 } 48 49 for(a = 0; a < 8; a++) 50 { 51 SER = dat4 >> 7; 52 dat4 <<= 1; 53 54 SRCLK = 0; 55 _nop_(); 56 _nop_(); 57 SRCLK = 1; 58 } 59 RCLK1 = 0; 60 _nop_(); 61 _nop_(); 62 RCLK1 = 1; 63 } 64 65 66 void main() 67 { 68 HC595SendByte(0xFF,0XFE,0x00,0x01); 69 while(1); 70 }
LED点阵(点亮一个汉字)
1 #include <REGX52.H> 2 #include <INTRINS.H> 3 4 typedef unsigned int u16; 5 typedef unsigned char u8; 6 7 sbit SER = P3^4; 8 sbit RCLK1 = P3^5; 9 sbit SRCLK = P3^6; 10 11 u8 code ledwei[] = 12 { 13 0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 14 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,0x00, 15 }; 16 17 u8 code ledduan[] = 18 { 19 /*-- 文字: 囧 --*/ 20 /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 21 0x00,0xFE,0x82,0x42,0x22,0x1A,0x02,0x02,0x02,0x0A,0x12,0x62,0x02,0xFE,0x00,0x00, 22 0x00,0xFF,0x40,0x40,0x40,0x7F,0x41,0x41,0x41,0x7F,0x40,0x40,0x40,0xFF,0x00,0x00, 23 }; 24 25 void delay(u16 i) 26 { 27 while(i--); 28 } 29 void HC595SendByte(u8 dat1, u8 dat2, u8 dat3, u8 dat4) 30 { 31 u8 a; 32 SRCLK = 1; 33 RCLK1 = 1; 34 for(a = 0; a < 8; a++) 35 { 36 SER = dat1 >> 7; 37 dat1 <<= 1; 38 39 SRCLK = 0; 40 _nop_(); 41 _nop_(); 42 SRCLK = 1; 43 } 44 45 for(a = 0; a < 8; a++) 46 { 47 SER = dat2 >> 7; 48 dat2 <<= 1; 49 50 SRCLK = 0; 51 _nop_(); 52 _nop_(); 53 SRCLK = 1; 54 } 55 56 for(a = 0; a < 8; a++) 57 { 58 SER = dat3 >> 7; 59 dat3 <<= 1; 60 61 SRCLK = 0; 62 _nop_(); 63 _nop_(); 64 SRCLK = 1; 65 } 66 67 for(a = 0; a < 8; a++) 68 { 69 SER = dat4 >> 7; 70 dat4 <<= 1; 71 72 SRCLK = 0; 73 _nop_(); 74 _nop_(); 75 SRCLK = 1; 76 } 77 RCLK1 = 0; 78 _nop_(); 79 _nop_(); 80 RCLK1 = 1; 81 } 82 83 84 void main() 85 { 86 u8 i; 87 while(1) 88 { 89 for(i = 0; i < 16; i++) 90 { 91 HC595SendByte(~ledwei[i+16],~ledwei[i],ledduan[16+i],ledduan[i]); 92 delay(10); 93 } 94 } 95 }
勤奋努力的小L

浙公网安备 33010602011771号