㈠ 我想要實現單片機: 數碼管每隔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;就行了。
㈡ 單片機 用51單片機顯示一個數碼管輪流顯示9到0再從0到9每隔一秒出現一次(用匯編語言)謝謝各
ORG 0000H
MOV DPTR,#TAB
MOV P0,#0FFH
LOP:
LOOP0:MOV 20H,#9
MOV R0,#10
LOOP1:MOV A,20H; 9-0
MOVC A,@A+DPTR
MOV P0,A
DEC 20H
CALL DELL;YANSHI
DJNZ R0,LOOP1
MOV 20H,#0;0-9
MOV R0,#10
LOOP2:MOV A,20H; 0-9
MOVC A,@A+DPTR
MOV P0,A
INC 20H
CALL DELL;YANSHI
DJNZ R0,LOOP2
AJMP LOP
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DELL:MOV R7,#250;yanshi,SHIZHONG:1WEIMIAO,YUEWEI1s
DEL1:MOV R6,#200
DEL2:MOV R5,#10
DEL3:DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1