給你一個仿真示例,如果實物效果不好就按10樓建議處理,以留給主函數(shù)足夠時間運行其它代碼。
無標題.jpg (442.29 KB, 下載次數(shù): 239)
下載附件
2024-4-15 17:02 上傳
- #include <reg51.H>
- #define uint unsigned int
- #define uchar unsigned char
- #define ulong unsigned long
- sbit P_HC595_SER = P2^0;
- sbit P_HC595_SRCLK = P2^1;
- sbit P_HC595_RCLK = P2^2;
- sbit A0=P2^3;
- sbit B0=P2^4;
- sbit C0=P2^5;
- uchar code table[]={
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
- // G H J K L M N o P Q r t
- 0x3d,0x76,0x1E,0x70,0x38,0x37,0x54,0x5C,0x73,0x67,0x50,0x78};
- ulong num=0xfffffffe;
- bit flag;//標志
- /**************** 向HC595發(fā)送一個字節(jié)函數(shù) ******************/
- void Send_595(uchar dat)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- dat <<= 1;
- P_HC595_SER = CY; //溢出位賦值數(shù)據(jù)輸出端
- P_HC595_SRCLK = 1; //移位時鐘
- P_HC595_SRCLK = 0;
- }
- }
- /**************** 向HC595發(fā)送5個字節(jié)驅(qū)動碼 ******************/
- void DisplayScan()
- {
- static uchar i;
- Send_595(num>>24);//向HC595發(fā)送位碼
- Send_595(num>>16);//向HC595發(fā)送位碼
- Send_595(num>>8);//向HC595發(fā)送位碼
- Send_595(num); //向HC595發(fā)送位碼
- Send_595(table[i]);//向HC595發(fā)送段碼
- P_HC595_RCLK = 1;//鎖存輸出數(shù)據(jù)
- P_HC595_RCLK = 0;
- num=num<<1|0x01;
- if(++i>=27)
- {
- num=0xFFFFFFFE;
- i=0;
- }
- }
- void InitTimer0(void)//740us
- {
- TMOD = 0x01;
- TH0 = 0x0FD;
- TL0 = 0x1C;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void main()
- {
- P_HC595_SRCLK = 0;//初始化移位時鐘端
- P_HC595_RCLK = 0;//初始化鎖存輸出端
- InitTimer0();
- while(1)
- {
- if(flag)
- {
- flag=0;
- DisplayScan();
- //其它程序
- }
- }
- }
- void Timer0Interrupt(void) interrupt 1
- {
- TH0 = 0xFD;
- TL0 = 0x1C;
- flag=1;
- }
復制代碼
|