『壹』 51單片機 讓數碼管自動顯示0至9的C程序。有沒有比這個更簡單的
可以通過代碼優化的方式來簡化代碼。
一、設置延時函數
延時函數在單片機中有著讓現實延時的能力,本程序中可以通過採用for循環方式進行延時,具體代碼如下:
void delay()
{
uinti,j;
for(i=100;i>0;i--)
for(j=1000;j>0;j--);
}
二、設置數碼管顯示數組
數組定義簡單,而且訪問很方便。所有元素類型相同,在數碼管顯示程序中可以讓程序代碼減少。數組代碼如下:
chara[10]={0xff,0x3,0x9f,0x25,0xd,0x99,0x49,0x41,0x1f,0x1,0x9};
三、設置數碼管顯示循環
數碼管顯示循環可以不用編寫一次又一次的數碼管顯示代碼,既方便又簡潔。具體代碼如下:
for(inti=0;i<10;i++)
{
P0=a[i];
delay();
}
(1)單片機數碼管顯示0到9擴展閱讀
單片機程序進行簡化可以查看是否有反復出現的代碼序列,整合成循環進行更改。同一類型且用法相同的變數可以整合成數組,方便對各個內容進行訪問。有特定功能的代碼段可以定義一個函數進行訪問。
注意:用C51語言編輯的單片機程序與普通C語言不同,C51語言中的數據類型和標准c中的數據類型不同。
『貳』 51單片機 編寫4個LED數碼管同時循環顯示0—9的數字 的程序。
#include<reg51.h>
#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
uchartime,scanled,tiao;
uchardisdat[6]="201803";
voiddelay(unsignedintx)
{
unsignedinti,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
voidt0isr()interrupt1 //秒計時
{
TH0=0x3c;
TL0=0xb0;
time++;
if(time==20)
{
time=0;
tiao++;
tiao%=10;
}
}
voidt1isr()interrupt3 //顯示
{
TH1=0xec;
TL1=0x78;
P2=1<<scanled;
P0=~ledtab[tiao];
scanled++;
scanled%=4;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1);
}
『叄』 我想要實現單片機: 數碼管每隔1s顯示從0-9怎麼實現 全部代碼。
你要c語言的還是匯編的?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uchar x); //延時程序
void ds_50ms(void); //50ms定時,中斷程序
void Ptime(uchar); //時間處理函數
void Js_Scan(void); //數碼管掃描函數
sbit S1=P2^4; //置位P2.4為數碼管1控制位
int num=0,m=0; //定義數據類型
//int code LED_Num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數碼管掃描數組,共陰極
int code LED_Num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽極
void main(void) //主函數
{
TMOD=0x01; //定義計時器工作類型
TH0=(65535-50000)/256; //定時器高4位初值
TL0=(65535-50000)%256; //定時器低4位初值
EA=1; //開中斷
ET0=1; //開中斷
while(1) //建立死循環
{
Js_Scan(); //調用數碼管掃描函數
TRO=1;
}
}
void ds_50ms(void) interrupt 1 using 1 //50ms定時中斷程序
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
num++; //執行累加,直到50ms
Ptime(num); //調用時間處理函數
}
void Ptime(uchar time) //時間處理函數
{
if(time==20) //判斷是否到1000ms,即1秒
{
num=0; //num清零
m++; //m累加
}
if(m==9) //數碼管顯示9時,m清零,重新計數
{
m=0;
}
}
void Js_Scan() //數碼管掃描函數
{
uchar j; //定義j數據類型
for(j=0;j<5;j++) //建立循環
{
S1=1;P0=LED_Num[m];delay(1);S1=0; //掃描顯示位,稍作延時(對於單位數碼管可直接置高置低,此為掃描的寫法,單位不需要延時,不需要寫for循環)
}
}
void delay(uchar x) //延時函數,防止數碼管顯示不穩定
{
uchar k;
while(x--)
for(k=0;k<125;k++);
}
這個是共陽極的,共陰極改變數組就行了。。。。 將前面的//刪掉 將後面數組加上// S1=0;S1=1;就行了。
『肆』 單片機c程序不懂 如圖是單只數碼管循環顯示0~9 i=(i+1)%10;是什麼意思呢
就是i+1然後除以10 得到余數,這樣i就能在0~9一直循環了 當i=9的時候 再運行i+1,這樣等於10,再餘10 就能回到0.
『伍』 單片機匯編語言讓數碼管顯示0到9
ORG00H
LJMPMAIN
ORG30H
MAIN:
MOVDPTR,#TABLE
MOVR7,#10
MOVA,#0
LOOP:
LCALLDISPLAY
LCALLDELAY
INCA
DJNZR7,LOOP
LJMPMAIN
DISPLAY:
PUSHACC
MOVCA,@A+DPTR
MOVP1,A
POPACC
RET
DELAY:
DL1:DJNZR6,DL1
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
再試試看。
『陸』 單片機匯編語言讓數碼管顯示0到9
小建議,釆用STC的51晶元替代AT的,釆用595替代164。
『柒』 單片機數碼管如何從1顯示到9
把 數碼管的 1-9 的 對應的碼算出來就好了
例如:#include <AT89X51.H>
//數字0-9的字形碼
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char dispcount;
void delay02s(void);
void main(void)
{
P1_0=0;//選通第一位數碼管
while(1)
{
for(dispcount=0;dispcount<10;dispcount++)
{
P0=table[dispcount];
delay02s();
}
}
}
void delay02s(void)
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=30;j>0;j--)
for(k=248;k>0;k--);
}
補充:單片機(Microcontrollers)是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機
『捌』 51單片機c語言設計,按鍵控制數碼管,依次按下顯示0到9循環
假設你的是共陽極數碼管,P0接數碼。按鍵接P2^0;
#include<reg52.h>
typedef unsinged int uint;
sbit key=P2^0;
unsigned char tab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void denay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--)
}
void main()
{
uchar a;
while(1)
{
P0=tab[a];
if (key1==0)
{delay(10);
if(key==0)
{
while(!key1);
a++;
if(a==10) a=0;
}
}
}
『玖』 單片機數碼管顯示0到9
#include<reg51.h>
sbitk1=P1^0;
#define uint16 unsigned int
#define uchar unsigned char
uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(){
uint16 i=1000;
while(i--);}
void main()
{
uchar n ;
P2=0xfe;
P1=0xff;
while(1)
{
if(k1==0){
if(n>=9) n=0;
else n++;
P0=shuzu[n];
while(!k1);
delay();
while(!k1);
}
}
}
(9)單片機數碼管顯示0到9擴展閱讀:
51單片機的功能特性
1,可以模擬63K程序空間,接近64K 的16位地址空間;
2,可以模擬64Kxdata 空間,全部64K 的16位地址空間;
3,可以真實模擬全部32 條IO腳;
4,完全兼容keilC51 UV2 調試環境,可以通過UV2 環境進行單步,斷點, 全速等操作;
5,可以使用C51語言或者ASM匯編語言進行調試 ;
6,可以非常方便地進行所有變數觀察,包括滑鼠取值觀察,即滑鼠放在某 變數上就會立即顯示出它此的值;
7,可選 使用用戶晶振,支持0-40MHZ晶振頻率;
8,片上帶有768位元組的xdata,您可以在模擬時選 使用他們,進行xdata 的模擬;
9,可以模擬雙DPTR 指針;
10,可以模擬去除ALE 信號輸出. ;
11,自適應300-38400bps 的所有波特率通訊;
12,體積非常細小,非常方便插入到用戶板中.插入時緊貼用戶板,沒有連接電纜,這樣可以有效地減少運行中的干擾,避免模擬時出現莫名其妙的故障;
13,模擬插針採用優質鍍金插針,可以有效地防止日久生銹,選擇優質園腳IC插座,保護模擬插針,同時不會損壞目標板上的插座. ;
14,模擬時監控和用戶代碼分離,不可能產生不能模擬的軟故障;
15,RS-232介面不計成本採用MAX202集成電路,串列通訊穩定可靠,絕非一般三極體的簡易電路可比。