這個代碼是改的其他人的,但是仿真的時候不知道是哪里出問題了
51hei截圖20210905190225.jpg (94.01 KB, 下載次數: 44)
下載附件
2021-9-5 19:04 上傳
單片機源程序如下:
- #include <reg52.h>
- #define led P2
- sbit LED1 = P3^0;
- sbit LED2 = P3^1;
- sbit LED3 = P3^2;
- sbit LED4 = P3^3;
- sbit LED5 = P3^4;
- sbit LED6 = P3^5;
- unsigned char code LedChar[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};//數碼管顯示字符轉換表
- unsigned char LedBuff[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//數碼管顯示緩沖區,初值 0xFF 確保啟動時都不亮
- unsigned char i = 0; //動態掃描的索引
- unsigned int cnt = 0; //記錄 T0 中斷次數
- unsigned char flag1s = 0; //1 秒定時標志
- void main()
- {
- unsigned long sec ; //記錄經過的秒數
- EA = 1; //使能總中斷
- TMOD = 0x01; //設置 T0 為模式 1
- TH0 = 0xFC; //為 T0 賦初值 0xFC67,定時 1ms
- TL0 = 0x67;
- ET0 = 1; //使能 T0 中斷
- TR0 = 1; //啟動 T0
- while (1)
- {
- if (flag1s == 1) //判斷 1 秒定時標志
- {
- flag1s = 0; //1 秒定時標志清零
- sec++; //秒計數自加 1
-
- //以下代碼將 sec 按十進制位從低到高依次提取并轉為數碼管顯示字符
- }
- LedBuff[0] = LedChar[sec%10];
- LedBuff[1] = LedChar[sec/10%10];
- LedBuff[2] = LedChar[sec/100%10];
- LedBuff[3] = LedChar[sec/1000%10];
- LedBuff[4] = LedChar[sec/10000%10];
- LedBuff[5] = LedChar[sec/100000%10];
-
- }
- }
- /* 定時器 0 中斷服務函數 */
- void InterruptTimer0() interrupt 1
- {
- TH0 = 0xFC; //重新加載初值
- TL0 = 0x67;
- cnt++; //中斷次數計數值加 1
- if (cnt >= 1000) //中斷 1000 次即 1 秒
- {
- cnt = 0; //清零計數值以重新開始下 1 秒計時
- flag1s = 1; //設置 1 秒定時標志為 1
- }
-
- //以下代碼完成數碼管動態掃描刷新
-
- P2 = 0xff; //顯示消隱
- switch (i)
- {
- case 0: LED1 = 0;i++; led = LedBuff[0]; LED1 = 1; break;
- case 1: LED2 = 0;i++; led = LedBuff[1]; LED2 = 1; break;
- case 2: LED3 = 0;i++; led = LedBuff[2]; LED3 = 1; break;
- case 3: LED4 = 0;i++; led = LedBuff[3]; LED4 = 1; break;
- case 4: LED5 = 0;i++; led = LedBuff[4]; LED5 = 1; break;
- case 5: LED6 = 0;i=0; led = LedBuff[5]; LED6 = 1; break;
- default: break;
- }
- }
復制代碼
|