0.png (110.2 KB, 下載次數: 61)
下載附件
2017-5-15 01:05 上傳
- //利用數碼管驅動芯片max7221實現8位數碼管顯示
- #include <reg51.h>
- #include <intrins.h>
- sbit DIN = P2^0; //數據串出引腳
- sbit CS = P2^1; //片選端
- sbit CLK = P2^2; //移位時鐘端
- unsigned char disp_buff[8] = {2,0,1,0,10,2,10,9}; //顯示的數字,數值為10的時候,顯示“-”
- // 延時函數
- void delayms(unsigned int x)
- {
- unsigned char i;
- while(x--)
- {
- for(i = 0;i < 120;i++);
- }
- }
- //寫數據函數
- void write_data(unsigned char addr,unsigned char dat)
- {
- unsigned char i;
- CS = 0; // 先寫地址,片選置低,串行數據加載到移位寄存器
- for(i = 0;i < 8;i++) //
- {
- CLK = 0; //時鐘上升沿數據移入內部移位寄存器
- addr <<= 1; //待發送的地址,每次左移一次,高位在前發送,
- DIN = CY; //數據移位后,如果有溢出,則可以從進位位CY中獲得溢出的數據位
- CLK = 1;
- _nop_();
- _nop_();
- CLK = 0; //下降沿時數據從DOUT移出
- }
- for(i = 0;i < 8;i++)
- {
- CLK = 0; //
- dat <<= 1; //發送數據
- DIN = CY;
- CLK = 1;
- _nop_();
- _nop_();
- CLK = 0;
- }
- CS = 1; //CS上升沿,數據鎖存
- }
- //初始化函數
- void init_max7221(void)
- {
- write_data(0x09,0xff); //編碼模式
- write_data(0x0a,0x07); //亮度控制
- write_data(0x0b,0x07); //掃描數碼管的位數
- write_data(0x0c,0x01); //工作模式
- }
- void main(void)
- {
- unsigned char i;
- init_max7221(); // 初始化
- delayms(2);
- for(i = 0;i < 8;i++)
- {
- write_data(i+1,disp_buff[i]); // 顯示8位
- }
- while(1);
- }
復制代碼
|