目錄
一、實驗環境與實驗器材
二、實驗內容及實驗步驟
1.單個數碼管顯示
2.六個數碼管依次從0~F變換顯示
3.proteus仿真
?
一、實驗環境與實驗器材
環境:Keli,STC-ISP燒寫軟件,Proteus. ???????
器材:TX-1C單片機(STC89C52RC)
圖1.1 工具
二、實驗內容及實驗步驟
1.單個數碼管顯示
Keil編寫及編譯生成hex文件,STC燒寫下載至單片機,單片機數碼管靜態顯示‘8’
#include<reg52.h>
sbit dula=P2^6; // 申明U1鎖存器的鎖存端
sbit wela=P2^7; // 申明U2鎖存器的鎖存端
void main()
{wela=1; // 打開U2鎖存端P0=0xFE; // 送入位選信號wela=0; // 關閉U2鎖存端dula=1; // 打開U1鎖存端P0=0x7F; // 送入位選信號dula=0; // 關閉U1鎖存端 while(1);
}
圖2.1.1 燒錄
圖2.1.2 硬件效果
proteus 仿真效果
圖2.2.3 Proteus仿真圖“第一數碼管顯示8”?
2.六個數碼管依次從0~F變換顯示
#include "reg52.h"
#define uchar unsigned char //定義無符號字符型
#define uint unsigned int //定義無符號整形
sbit dula=P2^6; // 申明U1鎖存器的鎖存端
sbit wela=P2^7; // 申明U2鎖存器的鎖存端
uchar num;
uchar code table[]={0x3f,0x06,0x5b,0x4f, // 0-F共陰級數碼管編碼0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint); //聲明延時函數void main()
{wela=1; // 打開U2鎖存端P0=0xc0; // 送入位選信號wela=0; // 關閉U2鎖存端while(1){for(num=0;num<16;num++) // 16個數循環顯示{dula=1; // 打開U1鎖存端P0=table[num]; // 送入選段信號dula=0; // 關閉U1鎖存端delayms(500); // 延時0.5s}}}void delayms(uint xms) // 定義延時函數
{uint i,j;for(i=xms;i>0;i--) // i=xms即延時約xms毫秒 for(j=110;j>0;j--);
}
圖 2.2.1 硬件初始顯示
圖2.2.2 硬件最后顯示?
proteus仿真圖:
圖2.2.2 proteus 仿真圖?
視頻:
靜態數碼管顯示0~F
?
3.proteus仿真
仿真圖:
圖2.3.1 Proteus仿真電路圖?
因為仿真點亮畫的簡單,所以代碼也相對簡單:
#include "reg52.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰0-9void delay(unsigned int n)
{unsigned int i=0,j=0;for(i=0;i<n;i++){for(j=0;j<120;j++);}
}void seg()
{int i=0;for(i=0;i<16;i++){P2=s[i]; //0011 1111delay(1000);}
}void main()
{while(1){seg();}}
視頻:
靜態數碼管bz
注意:仿真電路繪畫中,共陰共陽電路易混淆。(共陰接地,共陽接電源)
?
?
?