當前位置:首頁 » 編程語言 » c語言動態數碼管

c語言動態數碼管

發布時間: 2023-05-11 20:21:35

c語言動態數碼管顯示學號的後六位,同時運行流水燈

unsigned char num[6];
unsinged char numi;

writenum(unsigned char i, unsigned char num)
{
num[i] = num;

}
定時中斷()
{
位選端裂沖口 = 0;

段選埠 = num[numi];

位肆姿殲選埠 = 1<冊雹<numi;

numi++;

if(numi > 5)

numi = 0;

}

❷ 求用c語言寫的八位數碼管動態顯示程序,P0控制段,P2控制位。

#include"reg51.h"
#include "intrins.h" //_nop_();延老拿時函數用
#define uchar unsigned char
#define uint unsigned int
#define SEG_OUT P0 //段碼輸出口
#define BIT_OUT P2 //掃描口
sbit dot=P2^7; //LED小數點控制
uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
/* 共陽LED段碼表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */
uchar data dis_buff[8]={1,2,0,0,0,0}; //待顯示單元數據,共6個數據
unsigned long temp;
/*************1毫秒延時程序**************/
delay1ms(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<侍虧搭120;j++)
;
}
//
/***********LED顯空友示動態掃描函數**********/
display()
{
char k;
char m=0xfe;
for(k=0;k<8;k++) //8位LED掃描控制
{ BIT_OUT=0xff;
SEG_OUT=tab[dis_buff[k]];
BIT_OUT=m;
delay1ms(3);
m=(m<<1)|0x01;

}
dis_buff[0]=temp/10000000;

dis_buff[1]=(temp%10000000)/1000000;
dis_buff[2]=(temp%1000000)/100000;
dis_buff[3]=(temp%100000)/10000;
dis_buff[4]=(temp%10000)/1000;
dis_buff[5]=(temp%1000)/100;
dis_buff[6]=(temp%100)/10;
dis_buff[7]=temp%10;
}
/**************初始化程序****************/
void initiation()
{
TMOD=0x01;
TH0=-10000/256;
TL0=-10000%256; //10MS定時初值(T0計時用)
ET0=1;
TR0=1;
EA=1;
}

/****************定時器0中斷服務程序*****/
void init_timer0(void) interrupt 1
{
TH0=-10000/256;
TL0=-10000%256; //10MS定時初值(T0計時用)
t10ms++;
if(t10ms==100)
{
t10ms=0;
ts++;
if(ts==60)
{
temp++;
ts=0;
}
}
}
/****************主程序******************/
main()
{
initiation();
while(1)
{
display();
}
}
一秒加1

❸ C語言單片機代碼 數碼管動態顯示

這里的16個元素代表的是襲虧從十六進制數0~9、A、B、C、D、E、F的段碼,根據什麼來填這些數組元素?那就要看你設計程序時定義數組的作用拍襲神才能確定.table[1]對應的元素為0x06,是十六進制數,轉換成二進制數是00000110B,分別對應於數禪李碼管的Dp、g、f、e、d、c、b、a
腳,所以在共陰數碼管上點亮b、c兩段,顯示的是數字1,其它同理。

❹ C語言單片機代碼 數碼管動態顯示

你這數組裡面16組數分別為0~f的共陰數碼管的編碼,你說只需要數碼管顯示0~6,那麼多餘的就兆仿沒有用到,或者 在別的函數裡面有用到 你仔細看你的程序……
P0=table[1],意思就是說 往P0裡面送table這組數裡面的第2個數也就是0x06,0x06正好是共坦答陰數碼管顯示1的編碼。所以數碼管就會顯示1,同理 table[2]就是顯示2的編碼,需要注意的是table[0]指定的是table裡面的第族信纖一個數。

❺ c語言,動態數碼管顯示1234,程序怎麼寫,請那個哥哥幫忙一下謝謝。。

不知道你 是那種c環境,大概思路如下,
selcet,output 改為你的具體環境凳慎下的函數。

int i=1;
char [4]={0xf9,0xa4,0xb0,ox66};//輸茄做出1.2,3,4 相應
的字元值,共陽 極
while()
{
for( i=0;i<4;i++) // 動態顯示就是不停的循環逐個顯

{
selcet(i); //選擇第i 個 燈來顯示,
output(char[i]);//輸顫粗衡出1 還是2,3,4 字元

}

❻ 用4個動態數碼管顯示,實現0~9999計數功能,延時為1s,用c語言。

/***數顯秒錶,范圍0~9999***/
/***源程序默認硬體環境:52單片機,12MHz晶振,4位共陽數碼管,P0 口段選,P10~P13 高電平位選(NPN三極體驅動),P13為最高位數碼管***/
#include"reg52.h" //包含52頭文件
#define TRUE 1 //定義布爾量'1':真
#define FALSE 0 //定義布爾量'0':假
#define uchar unsigned char //定義 無符號字元型數據 簡稱
#define uint unsigned int //定義 無符號整型數據 簡稱
#define th0 0xfc
#define tl0 0x18 //1ms at 12MHz(定時器工作模式1 狀態)
#define SEG_Num 4 //數碼管位數
#define SEG_Data P0 //數碼管段驅動介面
#define SEG_En P1 //數碼管位驅動介面
#define SEG_AllOff (SEG_En&=0xf0) //關閉所有數碼管(位驅動)
#define DisTimeAt1msCount 4 //單'位'數碼管顯示時間,數碼管刷新頻率f=1/(N×t),其中 N為數碼管位數, t為單'位'數碼管顯示時間
#define T1sAt1msCount 1000 //1秒 計數值漏局(在定時器為1ms 情況下計數)
#define TimesEnd 10000 //顯示內容範圍 0~9999
uchar code SEG_B_List[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽數碼管代碼表"0-9"
uint Sec;
uchar bdata Flag=1;
sbit DisplayFlag=Flag^0; //顯示標志位
sbit TimesUpFlag=Flag^1; //時間更新標志位
void Timer0() interrupt 1 //定時器0中斷函數
{
static uchar t1ms; //定義靜態變數 t1ms 定時計數寄存空間
static uint t1ms_sec;
TL0=tl0;
TH0=th0; //重賦 1ms 定時初值
t1ms=++t1ms%DisTimeAt1msCount; //先纖搜殲計數值加1,後對計數范圍進行限制0~(DisTimeAt1msCount-1)
if(!t1ms) DisplayFlag=TRUE; //若定時計數值歸0,則表示計數值曾到達 單'位'顯示時間(DisTimeAt1msCount),顯示標志 置位
t1ms_sec=++t1ms_sec%T1sAt1msCount; //在 T1sAt1msCount(1000) 范圍內加1
if(!t1ms_sec) TimesUpFlag=TRUE; //若 歸0,則1s 時間到,時間更新標志位 置位
}
void SystemInit() //系統初始化函數
{
TMOD=0x01; //關閉定時器1,開啟定時器0,且工作在模式1(16位定時器)
TH0=th0;
TL0=tl0; //裝定時初值(1ms at 12MHz)
TR0=1; //啟動計時
ET0=1; //允許定時器0中斷
EA=1; //開啟系統中斷功能
}

float Pow_Self(float x,uint y)//自編簡易 x 的 y 次方函數,y只能是 非負整數
{
float sum;
if(x==0 && y==0) return; //0 的 0 次方無意義
else if(x==0) sum=0; //可有可無,y!=0的情況已經包含x=0,不加不影響結果,但影響運算速度
else if(y==0) sum=1; //除上述情況毀沖外,任何數的 0 次方均為 1
else if(y==1) sum=x; //任何數的 1 次方 均為 本身
else if(y>1) sum=Pow_Self(x,--y)*x; //遞歸調用,降冪
return sum; //返回計算結果
}
void TimesUpdata() //時間更新 函數
{
if(TimesUpFlag) //若 時間更新標志 為真
{
Sec=++Sec%TimesEnd; //Sec (秒)在 TimesEnd (0~999) 范圍內加1
TimesUpFlag=FALSE; //清 時間更新標志位
}
}
void Display(uint dis_num) //顯示函數,顯示內容為 無符號整型數據 dis_num
{
static uchar dis_loca; //定義靜態變數 顯示位置
if(DisplayFlag) //若顯示標志位為真(單'位'顯示時間結束),則執行以下任務
{
DisplayFlag=FALSE; //清顯示標志位
dis_loca=++dis_loca%SEG_Num; //先對 顯示位置 加1,後對變數范圍進行限制 0~(SEG_Num-1)
SEG_AllOff; //關閉所有數碼管顯示(位驅動)
SEG_Data=SEG_B_List[(dis_num/(uint)(Pow_Self(10,dis_loca)))%10]; //將顯示內容(dis_num) 本次需顯示的位(dis_loca)上的數值轉成代碼,並送到數據埠
SEG_En|=1<<dis_loca; //開啟本次需要顯示的位驅動
}
}
void main() //主函數
{
SystemInit(); //調用 系統初始化函數
while(1) //循環系統
{
TimesUpdata(); //調用 時間更新函數
Display(Sec); //調用 顯示函數 顯示內容為 Sec
}
}

❼ 使用C語言編寫數碼管動態顯示程序。頭文件為reg52,h,數碼管接P2口,為共陰

#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

#define DataPort P0 //定義數據埠 程序中遇到DataPort 則用P0 替換
sbit LATCH1=P2^2;//定義鎖存使能埠 段鎖存
sbit LATCH2=P2^3;// 位鎖存

unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值01234567
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數碼管點亮,即位碼

void Delay(unsigned int t); //函數聲明

/埋讓*------------------------------------------------
主函數
------------------------------------------------*/
main()
{
unsigned char i=0;
while(1)
{
DataPort=dofly_WeiMa[i]; //取位碼
LATCH2=1; //位鎖存
LATCH2=0;

DataPort=dofly_DuanMa[i]; //取顯示數據,段碼
LATCH1=1; //段鎖存
LATCH1=0;

Delay(60000); /攜塵/ 掃描間隙延時,時間太長會閃爍,太短會造成重影,
//這里故意延長時間,方便直觀看出動態掃描原辯液禪理
i++;
if(8==i) //檢測8位掃描完全結束?如掃描完成則從第一個
//開始再次掃描8位
i=0;
}
}
/*------------------------------------------------
延時函數,含有輸入參數 unsigned int t,無返回值
unsigned int 是定義無符號整形變數,其值的范圍是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}

❽ 電路如下圖請問單片機動態數碼管顯示C語言程序怎麼寫呢

#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共陰數碼答蔽管 0-9

unsigned char Dis_Shiwei;//定義十位
unsigned char Dis_Gewei; //定義個位
/******************************************************************/
/* 延時函數 */
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主清滾州函數 */
/******************************************************************/
main()
{

TMOD |=0x01;//定時器設置 10ms in 12M crystal,工作在模式1,16位定時
TH0=0xd8;
TL0=0xf0;
IE= 0x82; //打開中斷
TR0=1; //打開定時開關

while(1)
{
P0=Dis_Shiwei;//顯示十位
P2=0;
delay(300); //短暫延時
P0=Dis_Gewei; //顯示個位
P2=1;
delay(300);
}

}
/******************************************************************/
/* 定時器中斷函數 */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
static unsigned char second,count;
TH0=0xd8; //備輪重新賦值
TL0=0xf0;

count++;
if (count==100) //100x10ms=1S,大致延時時間
{
count=0;
second++; //秒加1
if(second==100)
second=0;
Dis_Shiwei=tab[second/10];//十位顯示值處理
Dis_Gewei=tab[second%10]; //個位顯示處理

}

❾ 四位一體共陽級數碼管動態顯示c語言編程

//滿意請採納
//這是一個四位數碼管動態顯示c語言程序,每隔一秒加一,直至加到9999為止
//使用時需採用鎖存器
#include<reg52.h>
#include"stdio.h"
unsignedcharcodeLED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsignedcharLEDbuff[]={0xff,0xff,0xff,0xff};
//定義數碼管的位選段
sbitSEG_bit_1=P0^1;
sbitSEG_bit_2=P0^2;
sbitSEG_bit_3=P0^3;
sbitSEG_bit_4=P0^4;

unsignedintcnt=0;
unsignedintsec=0;
unsignedintmini=0;
unsignedinthour=0;
unsignedchari=0;
/*voiddelay(unsignedintz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
*/
voidinterrupttimer0()interrupt1/*設置中斷函數*/
{
TH0=0xfc;
TL0=0x18;
cnt++;
//P1=0x80;
//delay(1);
switch(i)
{
case0:SEG_bit_1=0;SEG_bit_4=1;P1=LEDbuff[0];i++;break;
case1:SEG_bit_4=0;SEG_bit_3=1;P1=LEDbuff[1];i++;break;
case2:SEG_bit_3=0;SEG_bit_2=1;P1=LEDbuff[2]&;i++;break;
case3:SEG_bit_2=0;SEG_bit_1=1;P1=LEDbuff[3];i=0;break;
default:break;
}

}
/************************************************
voidserial_init()
{
//TMOD=0x20;//定時器T/C1工作方式2
SCON=0x50;//串口工作方式1,允許串口接收(SCON=0x40時禁止串口接收)
TH1=0xF3;//定時器初值高8位設置
TL1=0xF3;//定時器初值低8位設置
PCON=0x80;//波特率倍頻(屏蔽本句波特率為2400)
TR1=1;//定時器啟動
}
**********************************************/
voidmain()
{
//serial_init();//串口初始化

//TMOD=0x21;/*設置定時器*/
TMOD=0x01;
TH0=0xfc;
TL0=0x18;
TR0=1;

EA=1;/*設置中斷*/
ET0=1;

while(1)
{
if(0==TF0)
{
if(cnt>=1000)
{
cnt=0;
sec++;
if(sec>=60){
sec=0;mini++;
if(mini>=60){
mini=0;hour++;
if(hour>=24)hour=0;
}
}

LEDbuff[0]=LED[sec%10];//*設置數碼管顯示位*/
LEDbuff[1]=LED[sec/10%10];
LEDbuff[2]=LED[mini%10];
LEDbuff[3]=LED[mini/10%10];
//TI=1;//使用printf函數前須先將發送標志位TI置1
//printf("%4d%x,%x%x ",sec,LEDbuff[0],LEDbuff[1],LEDbuff[2]);
//TI=0;

}
}
}
}

熱點內容
ios透明文件夾插件 發布:2025-07-18 10:51:36 瀏覽:841
大眾蔚攬gte如何連接安卓 發布:2025-07-18 10:45:57 瀏覽:876
伺服器驅動怎麼安裝 發布:2025-07-18 10:35:15 瀏覽:817
路由器密碼忘了怎麼改 發布:2025-07-18 10:32:13 瀏覽:450
android管家 發布:2025-07-18 10:25:02 瀏覽:70
網站訪問地區 發布:2025-07-18 10:24:55 瀏覽:260
緩存傳文件 發布:2025-07-18 10:18:33 瀏覽:155
生信差異分析的腳本 發布:2025-07-18 10:14:50 瀏覽:598
微信打開網頁繼續訪問 發布:2025-07-18 10:09:50 瀏覽:50
蔬菜解壓游戲大全 發布:2025-07-18 10:00:12 瀏覽:72