A. 用c語言單片機led燈顯示數字「28」,如何編程
給LED編個數組,控制IO口,或者直接控制IO口,不過要看顯示的28要多大,會佔用比較多的IO口,道理和矩陣鍵盤差不多。
常式:
#include<reg52.h>//單片機頭文件
voiddelay1ms(unsignedintms);//延時ms函數聲明(可根據實際情況更改)
unsignedcharcodeled0[]={};//字碼表,你自己把你要顯示的字碼放進去就可以了
voidmain()
{
unsignedcharw,i;
while(1)
{
//顯示0
w=0x01;//行變數為第一行
for(i=0;i<8;i++)
{
P1=w;//行數據送P1口
P0=led0[i];
delayms(1);//列數據送P0口
w<<=1;//向下移動一行
}
}
}
voiddelay1ms(unsignedintms)
{
unsignedinti,j;
for(i=0;i<ms;i++)
for(j=0;j<110;j++)
}
B. 51單片機程序(c語言版),按鍵矩陣控制數碼管顯示數字。十位數顯示不全
沒有下拉電阻,如果沒有下拉電阻,沒有被按鍵時,引腳是高組態,這個時候不能用來讀取數據,必須將用來讀的引腳加上下拉電阻拉到地,這樣才能讀數據,所以你需要4個下拉電阻在鍵盤上。。。。 記住引腳懸空,又沒有上拉或下拉電阻的時候不要讀數據,這時候讀的東西是不會出現你想要的結果,可能1,可能0 ,有上拉無輸入時,是1,下拉式0,你這裡面希望是無輸入時引腳為0,所以用下拉。。。。
C. 運用51單片機實現4位8段LED數碼管的動態數字顯示,寫出C語言程序
#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,nn=0;
uchar dat[]={2,0,1,2,1,1,4,5,8,2};
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
number%=4;
switch(number)
{
case 0:P2=0x08;P0=distab[nn];
break;
case 1:P2=0x04;P0=distab[nn+1];
break;
case 2:P2=0x02;P0=distab[nn+2];
break;
case 3:P2=0x01;P0=distab[nn+3];
break;
default:break;
}
nn++;
nn%=7;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
D. 求C語言程序—基於AT89C51單片機驅動8*8LED陣列顯示數字2012010895
使用匯編語言利用AT89C51單片機驅動8*8LED陣列顯示數字2012010895倒不是很復雜,但需要知道單片機型號、晶振頻率,當你有電力圖貼上來也行。
//*****************************//
//程序名:十字路口交通燈控制
//編寫人:黃庭劍
//初寫時間:2009年1月2日
//程序功能:南北為車行道,延時60秒;東西方向為人行道,延時20秒,且在最後3秒黃燈顯示2秒鍾再實現切換.
//CPU說明:AT89C51型單片機; 24MHZ晶體振盪器
//完成時間:2009年1月6日
//*****************************//
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
sfr p0 = 0x80;
sfr p1 = 0x90;
sfr p2 = 0xA0;
sfr p3 = 0xb0; //這部分內容其實在「#include<reg51.h>」里已經有,但裡面定義的必須區分大小寫,在這里,因為我程序採用的是小寫,reg51.h里對各個埠與寄存器的定義都是大寫,所以在編譯連接時,會報錯,所以,在本設計程序里,我只用到了埠,在這里也就只定義了四個,而沒有去改reg51.h裡面的內容。其實兩者是一樣的。
sbit sw = p0^0;
sbit OE =P0^6;
sbit LE =P0^7; //74LS373鎖存器控制端定義
char display[]={ 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99 }; //p1口的數碼管時間顯示調用,利用74L74BCD碼,8位驅動輸出;
//函數聲明 begin
void delay1(int count);
void delay_long(int number1,int number2);
void people_car_drive();
//函數聲明end
//***********************//延時子程序
void delay1(int count)
{ int i;
for(i=count;i>0;i--)
{ ;}
}
void delay_long(int number1,int number2)
{
int a,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{ _nop_(); }
}
}
//**********************//延時子程序
void people_car_drive()
{
int p_1=2,i,j=9,p_2=6; //****************//行人通行時,延時20秒
p2=0x09; //南北紅燈亮
p3=0x24; //東西綠燈亮
while(p_1-->0)
{ LE=1;
OE=0;
if(p_1==0){OE=1;} //當十位數減到0時,只顯示個位數
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break; //減到3時退出循環,讓其黃燈閃爍顯示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
//*******************************************************************************//
p2=0x12; //南北黃燈閃爍三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是車輛通行時延時60秒//
p2=0x24; //南北綠燈亮
p3=0x09; //東西紅燈亮
while(p_2-->0)
{ LE=1;
OE=0;
if(p_2==0){OE=1;} //當十位數減到0時,只顯示個位數
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break; //減到2時退出循環
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
p2=0x12; //南北黃燈閃爍三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1); //南北黃燈閃爍三秒完畢
}
void main() //主函數入口處
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00; //初始化各埠
{ while(1)
{
if(sw==0)
{ people_car_drive();}
else
{
p2=0x00;
p3=0x00; //關閉所有交通燈}
E. 運用51單片機實現4位8段LED數碼管的動態數字顯示,寫出C語言程序
動態顯示的是有固定格式的,賦值,開顯示,延時,關顯示,假設p0口接數據顯示位,p2口低4位接片選,
p2=tab[1];
//賦值
p3_0=0;
//開第一位顯示
for(i=0;i<200:i++);//延時
p3_0=1;
//關第一位顯示
p2=tab[2];
p3_1=0;
//開第二位顯示
for(i=0;i<200:i++);
p3_1=1;
這個程序就是讓兩個數碼管分別顯示1和2,注意程序開頭包含頭文件regx52.h,如果是包含reg52.h編譯不了的
F. 單片機led顯示c程序
電路圖如下:
#include<reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitan=P2^6;
sbitwei=P2^7;
ucharcodedigit[6]={0xf9,0xa4,0xb0,0x99,0x92,0X82};
voiddelay(xms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidmain()
{
while(1)
{
wei=1;
P0=0x01;
wei=0;
an=1;
P0=digit[0];
an=0;
delay(500);
wei=1;
P0=0x02;
wei=0;
an=1;
P0=digit[1];
an=0;
delay(500);
wei=1;
P0=0x04;
wei=0;
an=1;
P0=digit[2];
an=0;
delay(500);
wei=1;
P0=0x08;
wei=0;
an=1;
P0=digit[3];
an=0;
delay(500);
wei=1;
P0=0x10;
wei=0;
an=1;
P0=digit[4];
an=0;
delay(500);
wei=1;
P0=0x20;
wei=0;
an=1;
P0=digit[5];
an=0;
delay(500);
}
}
G. 單片機c語言,用四個個開關控制led顯示0~f,這個怎麼寫啊
假設P0的低4位接4 個開關,P1接一個數碼管,程序大體如下:
include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=0;
//共陰數碼管七段碼
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,.......};
void delay1ms(uint i) //1ms延時程序
{uint j;
for(;i>0;i--){
for(j=0;j<164;j++)
{;} }
}
void main(void )//主程序
{
while(1)
{
num=table(0x0f&P0);
P1=num;
delay1ms(2);
}
}
H. 單片機led顯示程序C語言的
該程序的原理是動態掃描,即每一時刻,只讓一個數碼管亮。讓數碼管從第一個到地第八個依次快速地顯示,給人的視覺效果就是八個數碼管同時顯示。
/*程序讓八個數碼管顯示數字0-7。*/
#include<reg52.h>
#include<intrins.h>包含對_crol_()函數的聲明的頭文件。
#define uchar unsigned char宏定義用以簡寫unsigned char
#define uint unsigned int
uchar temp,i;定義無字元型全局變數temp,i。
void delay(unsigned int z)//延時程序,大概延時1ms。
{
unsigned int x ,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07};//數碼管真值數組,分別為0到7.
void main()
{
while(1)//大循環,讓顯示的狀態保持
{
temp=0xfe;
for(i=0;i<8;i++)
{
P3=temp;讓第一個數碼管顯示
P1=table[i];調用數組
temp=_crol_(temp,1); 每執行一條這個語句,temp的值左移一位
delay(4); 延時(4這個參數不知道管不管用,你實際操作的時候自己改一下)
}
i=0;
}
}
I. 怎麼用C語言控制16*16的LED顯示漢字數字,漢字比如「歡迎光臨」,數字比如「520」; 謝謝高手指點迷津!
踩個腳印,回去看看
======================================
匯編的代碼給你,相關的注釋也寫了,設計自己弄一下吧
SER EQU P1.0 ; TPIC6B595 第3腳
OE EQU P1.1;TPIC6B595 第8腳
RCK EQU P1.2;TPIC6B595 第12腳
MR EQU P1.3;TPIC6B595 第9腳
SRCLK EQU P1.4;TPIC6B595 第13腳
ORG 0000H
LJMP MAIN
ORG 0100H
;**************************主程序**********************************
MAIN: MOV SP,#70H
SETB OE
MOV 2BH,#00H
MOV 27H,#00H
START: ;初始化寄存器RAM單元
MOV R0, #30H
MOV R1,#64H ;30H~6FH單元清零
MOV A, #00H
ST: MOV @R0,A
INC R0
DJNZ R1,ST
;2Dh------定址偏址 ;整屏四個字一起顯示
LOOP:MOV DPTR,#TAB;賦查表初值
MOV R3,#56
PLAY: MOV 2DH,#00H
MOV 2FH,#10H
GG: LCALL LINE16;掃描顯示一次
MOV 2DH,#00H
DJNZ 2FH,GG
MOV A,DPL
CLR C
ADD A, #16
MOV DPL ,A
MOV A, DPH
ADDC A ,#00H
MOV DPH, A
DJNZ R3,PLAY
SJMP START
LINE16: MOV 2BH,#16;掃16行,2BH放後還剩幾行
FF: LCALL LINE1;掃描顯示一行子程序
DJNZ 2BH,FF;掃描行直到16行掃完再轉
RET
LINE1:LCALL MSTR;將顯示的內容移入內存單元
LCALL SEND;發送串口子程序
LCALL XH;選通行子程序
RET
MSTR: ;顯示內容移入內存單元
MOV R0,#30H
MOV R4,#9
MOV A,2DH;
BB: MOVC A,@A+DPTR
MOV @R0,A
INC R0
MOV A,2DH
ADD A,#16;加16移到下一行
MOV 2DH,A
DJNZ R4,BB
MOV A,2DH
SUBB A,#143
MOV 2DH,A
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$發送數據到串口子程序$$$$$$$$$$$$$$$$$$$$$$$$$
SEND:MOV R0,#30H
MOV R5,#8 ;一行有8個位元組,如每次顯示字數不同要作相應改動
SETB OE
SETB MR
CLR SRCLK
CLR RCK
SETB P1.6
SETB P1.7
LQ: CLR C
MOV R2,#8
MOV A,@R0
; CPL A ;TPIC6B595應該不用這一步
LCALL DD1;調用顯示一個位元組的子程序
INC R0;指向下一個顯示單元
DJNZ R5,LQ
RET
DD1: CLR SRCLK;清串列CP端
RLC A;
MOV SER,C
SETB SRCLK ;觸發串列CP端
DJNZ R2,DD1;每個位元組移8次夠了向下執行
RET
;選通行子程序
XH: CLR RCK ;將輸出CP變成低電平為上升沿做准備
NOP
SETB RCK
CLR P1.6
;CLR P1.7
MOV A,27H
MOV P0,A
CLR OE
LCALL DE25MS
INC A
SETB OE
SETB P1.6
MOV A,27H
ANL A,#0F0H
SWAP A
ADD A,#01H
SWAP A
MOV 27H,A
CLR MR
SETB MR
RET
DE25MS: MOV R5,#09H
DEL2: MOV R6,#0FH
DEL3: MOV R7,#01H
DJNZ R7,$
DJNZ R6,DEL3
DJNZ R5,DEL2
RET
TAB:
字型檔
END
兩點說明:
1. 上述程序可以整屏四個字一起顯示,要是要顯示你說的那麼些字,還得作半屏控制,實現漢字滾動,太麻煩,一時半會兒出不來。
2.
TAB:
字型檔
END
上面的字型檔根據你要顯示的字,自己弄一下吧,給你個例子:
顯示「歡迎光臨」的話,字型檔為:
TAB: ;歡
DB 00H,20H,3CH,10H
DB 44H,08H,84H,04H
DB 04H,03H,04H,03H
DB 84H,04H,44H,08H
DB 3CH,10H,00H,20H
DB 00H,00H,07H,20H
DB 04H,10H,0F4H,0FH
DB 04H,10H,1CH,20H
;迎
DB 00H,00H,49H,20H
DB 6AH,10H,0DCH,0FH
DB 08H,10H,00H,20H
DB 0FEH,27H,02H,22H
DB 02H,21H,81H,20H
DB 00H,20H,02H,20H
DB 0FEH,2FH,02H,22H
DB 02H,22H,0FEH,21H
;光
DB 00H,00H,00H,20H
DB 22H,20H,24H,20H
DB 28H,10H,30H,08H
DB 0E0H,07H,3FH,00H
DB 20H,00H,0F0H,3FH
DB 28H,20H,24H,20H
DB 22H,20H,20H,20H
DB 00H,38H,00H,00H
;臨
DB 00H,00H,0F0H,03H
DB 00H,00H,00H,00H
DB 0FFH,3FH,00H,00H
DB 40H,00H,20H,3FH
DB 10H,21H,0FH,21H
DB 14H,21H,24H,3FH
DB 44H,21H,04H,21H
DB 04H,21H,04H,3FH
DB 00H,00H,00H,00H
END ;程序結束
J. 求一個單片機控制單個led循環顯示20141229數字的c語言程序圖
/*單只數碼管顯示20141229*/
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
code uint8 LED_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delay(uint16 x)
{
uint16 i,j;
for(i = x; i > 0; i --)
for(j = 114; j > 0; j --);
}
void main()
{
uint8 led_number[] = {2,0,1,4,1,2,2,9};
uint8 i = 0;
while(1)
{
for(i = 0;i < 8;i++)
{
P0 = LED_CODE[led_number[i]];
delay(500);
}
}
}
圖中緩沖器245可以不用,這裡面模擬時1229因為兩個2是連在一起的,所以除了顯示時間長一點基本感覺不出有2個2~