㈠ 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);
}
㈡ 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();
}
(2)單片機0到9動態程序擴展閱讀
單片機程序進行簡化可以查看是否有反復出現的代碼序列,整合成循環進行更改。同一類型且用法相同的變數可以整合成數組,方便對各個內容進行訪問。有特定功能的代碼段可以定義一個函數進行訪問。
注意:用C51語言編輯的單片機程序與普通C語言不同,C51語言中的數據類型和標准c中的數據類型不同。
㈢ 怎樣用單片機定時器設計0到9秒的循環程序
#define uint unsigned int
#define uchar unsigned char
#include <reg52.h>
uint i;
uchar code TAB[]=[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(void)
{
TMOD=0x22; /*定時器0設置為工作方式2,基準定時(256-6)/1M=0.25ms*/
TH0 =6; //賦T0的預置值6,溢出4000次就是1秒鍾
TL0 =6;
ET0=1; //打開定時器0中斷
EA=1; //打開總中斷
TR0=1; //啟動定時器
while(1) //程序循環
{
P3=TAB[(i)];//p3送數
}
}
//定時器0中斷
void timer0(void) interrupt 1 using 1
{
static uint t; //注意t的范圍,這里涉及到C51變數取值范圍這個知識點
t++;
if(t==4000) //T0的預置值6,溢出4000次就是1秒鍾,晶振12MHz
{
t=0;
i++;
i=i%10;
}
}