『壹』 求一個簡單的LED燈c語言程序
初始化部分你要自己根據晶元資料寫,數碼管部分可以根據數碼管的資料做數組xs[10]={0x3b……}要看數碼管引腳定義了,看原理圖看不出來的,可以做個200ms的定時器,然後計數5次就是1s
直接給數碼管的io口附數組的值,如p1=xs[5];要看你給的是哪個io口了,我這邊看不清你的原理圖,led亮200ms後就換動作太快,看不出效果,可以把時間加長
『貳』 C語言編寫程序用於16LED顯示屏鍵盤輸入漢字LED屏輸出
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*下面是引腳連接關系*/
sbit AD_EOC =P2^4; /*轉換完成指示*/
sbit AD_IOCLK =P2^3; /*時 鍾*/
sbit AD_DATIN =P2^2; /*數據入*/
sbit AD_DATOUT=P2^1; /*數據出*/
sbit AD_CS =P2^0; /*片 選*/
uint ad_result; /*存各模擬通道的數據*/
sbit E=P2^7;
sbit rs=P2^6;
sbit rw=P2^5;
sbit S1=P3^0;
sbit S2=P3^1;
sbit S3=P3^2;
sbit S4=P3^3;
sbit S5=P3^4;
sbit S6=P3^5;
sbit S7=P3^6;
sbit S8=P3^7;
sbit S9=P1^5;
sbit S10=P1^6;
sbit S11=P1^7;
sbit S12=P1^0;
uchar code zengzhen[]={"wuhanligongdaxue"};
uchar code zengzhen1[]={"Cha : mV "};
uint zengzhen2[8];
uint i,j;
uchar sum;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
rw=0;
P0=com;
E=0;
delay(1);
E=1;
delay(1);
E=0;
}
void write_date(uchar date)
{
rs=1;
rw=0;
P0=date;
E=0;
delay(1);
E=1;
delay(1);
E=0;
}
void init()
{
E=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
/*啟動A/D轉換,並讀取上次轉換結果*/
uint read2543(CHN)
{
uchar i,temp;
uint read_ad_data = 0;
CHN=CHN<<4;
AD_IOCLK=0;
AD_CS=1;
AD_CS=0;
temp=CHN;
for(i=0;i<12;i++)
{
read_ad_data=read_ad_data<<1;
if((temp&0x80)!=0){AD_DATIN=1;}
else{AD_DATIN=0;}
if(AD_DATOUT){read_ad_data=read_ad_data+1;}
AD_IOCLK =1;
_nop_();_nop_();_nop_();_nop_();
AD_IOCLK =0;
_nop_();_nop_();_nop_();_nop_();
temp=temp<<1;
}
AD_CS=1;
read_ad_data=read_ad_data&0x0fff;
return(read_ad_data);
}
void display(uint k,uchar add)
{
uchar a,b,c,d;
float j=k*4.444/4.095;
uint i=j/1;
a=i/1000;
b=i%1000/100;
c=i%100/10;
d=i%10;
write_com(add);
write_date(a+0x30);
write_date(b+0x30);
write_date(c+0x30);
write_date(d+0x30);
delay(300);
}
/************顯示程序*************/
/*主 程序*/
void scan()
{
if(S1==0)
{
delay(5);
if(S1==0)
{
while(!S1);
sum=1;
}
}
if(S2==0)
{
delay(5);
if(S2==0)
{
while(!S2);
sum=2;
}
}
if(S3==0)
{
delay(5);
if(S3==0)
{
while(!S3);
sum=3;
}
}
if(S4==0)
{
delay(5);
if(S4==0)
{
while(!S4);
sum=4;
}
}
if(S5==0)
{
delay(5);
if(S5==0)
{
while(!S5);
sum=5;
}
}
if(S6==0)
{
delay(5);
if(S6==0)
{
while(!S6);
sum=6;
}
}
if(S7==0)
{
delay(5);
if(S7==0)
{
while(!S7);
sum=7;
}
}
if(S8==0)
{
delay(5);
if(S8==0)
{
while(!S8);
sum=8;
}
}
if(S9==0)
{
delay(5);
if(S9==0)
{
while(!S9);
sum=9;
}
}
if(S10==0)
{
delay(5);
if(S10==0)
{
while(!S10);
sum=10;
}
}
if(S11==0)
{
delay(5);
if(S11==0)
{
while(!S11);
sum=11;
}
}
if(S12==0)
{
delay(5);
if(S12==0)
{
while(!S12);
sum=12;
}
}
}
void fw()
{
write_com(0x80+0x40+2);
for(j=0;j<12;j++)
{
write_date(zengzhen1[j]);
delay(5);
}
}
void main(void)
{
uchar h ;
uint s=0;
init();
delay(23);
write_com(0x80);
for(j=0;j<16;j++)
{
write_date(zengzhen[j]);
delay(5);
}
write_com(0x80+0x40+2);
for(j=0;j<12;j++)
{
write_date(zengzhen1[j]);
delay(5);
}
while(1)
{
if(sum==12)
{
scan();
if(sum!=12)
{
init();
delay(23);
write_com(0x80);
for(j=0;j<16;j++)
{
write_date(zengzhen[j]);
delay(5);
}
write_com(0x80+0x40+2);
for(j=0;j<12;j++)
{
write_date(zengzhen1[j]);
delay(5);
}
}
}
if(sum==11)
{
scan();
if(sum!=11)
{
fw();
}
}
scan();
if(sum==1)
{
for(h=0;h<15;h++)
{
ad_result=read2543(0);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(0+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==2)
{
for(h=0;h<15;h++)
{
ad_result=read2543(1);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(1+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==3)
{
for(h=0;h<15;h++)
{
ad_result=read2543(2);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(2+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==4)
{
for(h=0;h<15;h++)
{
ad_result=read2543(3);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(3+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==5)
{
for(h=0;h<15;h++)
{
ad_result=read2543(4);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(4+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==6)
{
for(h=0;h<15;h++)
{
ad_result=read2543(5);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(5+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==7)
{
for(h=0;h<15;h++)
{
ad_result=read2543(6);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(6+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==8)
{
for(h=0;h<15;h++)
{
ad_result=read2543(7);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(7+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==9)
{
for(h=0;h<15;h++)
{
ad_result=read2543(8);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(8+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==10)
{
for(h=0;h<15;h++)
{
ad_result=read2543(9);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(9+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==11)
{
for(h=0;h<15;h++)
{
ad_result=read2543(10);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(1+0x30);
write_date(0+0x30);
write_date(':');
display(s,0x80+0x40+8);
write_date('m');
write_date('V');
s=0;
}
if(sum==12)
{
/*delay(100);
for(h=0;h<8;h++)
{
ad_result=read2543(h);
while(!AD_EOC);
ad_result=read2543(h);
zengzhen2[h]=ad_result;
}
*/
zengzhen2[0]=read2543(0);
while(!AD_EOC);
display(zengzhen2[0],0x80);
zengzhen2[1]=read2543(1);
while(!AD_EOC);
display(zengzhen2[1],0x84);
zengzhen2[2]=read2543(2);
while(!AD_EOC);
display(zengzhen2[2],0x88);
zengzhen2[3]=read2543(3);
while(!AD_EOC);
display(zengzhen2[3],0x8c);
zengzhen2[4]=read2543(4);
while(!AD_EOC);
display(zengzhen2[4],0x80+0x40);
zengzhen2[5]=read2543(5);
while(!AD_EOC);
display(zengzhen2[5],0x80+0x40+4);
zengzhen2[6]=read2543(6);
while(!AD_EOC);
display(zengzhen2[6],0x80+0x40+8);
zengzhen2[7]=read2543(7);
while(!AD_EOC);
display(zengzhen2[7],0x80+0x40+12);
}
}
}
望採納謝謝
『叄』 用C語言怎麼編寫7段LED的顯示程序
C語言寫LED數碼管顯示程序與匯編是一致的,將顯示的基本內容定義在一個數組中就可以了,比如:
#include<reg51.h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit rstkey=P2^2;
sbit speaker=P2^0;
void delay()//延時約400毫秒
{
uchar i,j;
for(i=0;i<200;i++)
for(j=0;j<250;j++);
}
main()
{
uchar i,key;
P2=0xff;
while(1)
{
i=0;
P1=table[i];
while(1)
{
key=P3;
if(key!=0)break;
}
switch(key)
{
case 0x01:i=1;break;
case 0x02:i=2;break;
case 0x04:i=3;break;
case 0x08:i=4;break;
case 0x10:i=5;break;
case 0x20:i=6;break;
case 0x40:i=7;break;
case 0x80:i=8;break;
default:break;
}
P1=table[i];//顯示按下搶答器的號
P0=key;//顯示按下鍵號的LED
while(1)
{
if(rstkey==0)break;//主持人按下復位鍵則重新開始
speaker=~speaker;//否則蜂鳴器報警
delay();
}
}
}
『肆』 用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++)
}
『伍』 怎麼用C語言編寫LED屏幕測試,每過3秒鍾屏幕更換一用顏色。
sbit key = P1_0; sbit led = P1_1; #define led_on 0 main() { while( key ) { led = ! led_on; } while(!key) { led = led_on; delay( 100 ); led = ! led_on; delay( 100 ); } } 上面這個是按下閃,松開滅的程序,稍微改一下,就可以做到要求的功
『陸』 用C語言編寫一個單片機控制LED燈閃爍變化的編程 急用!!!!!!!!!
C語言實現LED燈閃爍控制配套51單片機開發板。
#include //包含單片機寄存器的頭文件
/****************************************
函數功能:延時一段時間
*****************************************/
void delay(void) //兩個void意思分別為無需返回值,沒有參數傳遞。
{
unsigned int i; //定義無符號整數,最大取值范圍65535。
for(i=0;i<20000;i++) //做20000次空循環。
; //什麼也不做,等待一個機器周期。
}
/*******************************************************
函數功能:主函數 (C語言規定必須有也只能有1個主函數)。
********************************************************/
void main(void)
{
while(1) //無限循環。
{
P0=0xfe; //P1=1111 1110B, P0.0輸出低電平。
delay(); //延時一段時間。
P0=0xff; //P1=1111 1111B, P0.0輸出高電平。
delay(); //延時一段時間。
}
}
單片機驅動LED燈的源程序:
#include<reg52.h> //頭文件。
#define uint unsigned int
#define uchar unsigned char
sbit LED1=P1^7; //位定義。
void delay_ms(uint);//mS級帶參數延時函數。
void main()
{
while(1)
{
LED1=0;
delay_ms(1000);
LED1=1;
delay_ms(1000);
}
}
void delay_ms(uint z) //延時子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
(6)led屏幕c語言編程擴展閱讀:
單片機應用分類:
通用型:
這是按單片機(Microcontrollers)適用范圍來區分的。例如,80C51式通用型單片機,它不是為某種專門用途設計的;專用型單片機是針對一類產品甚至某一個產品設計生產的,例如為了滿足電子體溫計的要求,在片內集成ADC介面等功能的溫度測量控制電路。
匯流排型:
這是按單片機(Microcontrollers)是否提供並行匯流排來區分的。匯流排型單片機普遍設置有並行地址匯流排、 數據匯流排、控制匯流排,這些引腳用以擴展並行外圍器件都可通過串列口與單片機連接。
另外,許多單片機已把所需要的外圍器件及外設介面集成一片內,因此在許多情況下可以不要並行擴展匯流排,大大減省封裝成本和晶元體積,這類單片機稱為非匯流排型單片機。
控制型:
這是按照單片機(Microcontrollers)大致應用的領域進行區分的。一般而言,工控型定址范圍大,運算能力強;用於家電的單片機多為專用型。
通常是小封裝、低價格,外圍器件和外設介面集成度高。 顯然,上述分類並不是惟一的和嚴格的。例如,80C51類單片機既是通用型又是匯流排型,還可以作工控用。
參考資料來源:網路-單片機
『柒』 基於LED顯示屏設計C語言編程
本設計是在51單片機與PC機上實現基於RS232串列通訊功能的,制定和實現可靠的上下位機通訊協議,完成顯示數據的下傳和讀取,圖形和文字有靜止、移入移出等多種顯示方式是本設計的最大特點。第二章 系統組成與工作原理2.1系統設計要求和技術指標 此次設計的系統將由五部分(主要分為上位機部分和下位機部分,其中下位機主要分成,顯示信息存儲器﹑LED顯示屏行驅動電路和LED點陣顯示屏)組成來實現,分別為:上位PC機﹑串列電平轉換器﹑顯示信息存儲器﹑LED顯示屏行驅動電路和LED點陣顯示屏。控制系統的結構框圖如圖2.1所示。設計要求系統能控制中文LED漢字顯示,主控板採用以單片機為核心的單片機系統。MCS-51單片機具有擴展性強﹑功能強盛﹑價格較低等長處,因此,採用Atmel公司的AT89C52單片機。採用MAX232作為RS-232與TTL電平的轉換器件。PC機發送到下位機的數據先由SBUF(數據緩沖區)接收,再存入EEPROM器件AT24C256中。漢字點陣顯示屏可分為屏體和控制器兩部分。屏體的主要部分是LED點陣屏,還有行列驅動電路。LED點陣顯示屏採用8*8LED顯示模塊拼接而成。控制電路負責有序地選通各行,選通每一行之前還要把該行該列的數據預備好,一旦該行選通,這一行上的LED發光器件就可以根據列數據進行顯示。從理論上講,不論顯示圖形還是文字,只要控制這些組成圖形或文字的各個點所在位置相應的LED器件發光,就可以得到想要的顯示結果,這種同時控制各個發光點亮滅的方法稱為靜態驅動顯示方式。16*16點陣共有256個發光二極體,顯然單片機沒有這么多的埠,假如採用鎖存器來擴展埠,按8位的鎖存器來計算,16*16的點陣需要256/8=32個鎖存器。這個數字很大,因為這里僅僅是16*16的點陣,但是在實際應用中的顯示屏往往要大的多,這樣在鎖存器上花的成本也就將是一個很大的數字。因此,在實際應用中的顯示屏幾乎都不採用靜態驅動顯示方式之中設計,而是採用另一種稱為動態掃描的顯示方式。所謂動態掃描,簡朴地說就是逐行輪流點亮,這樣掃描驅動電路就可以實現多行同名列共用一套列驅動器。以本次設計的16*16點陣為例,把所有的同一行發光管的陽極連在一起,把所有同一列發光管的陰極連在一起(共陽極接法),先發送出對應第一行發光管亮滅的數據並鎖存,然後選通第一行使其點亮一定的時間,然後熄滅;再發送出第二行的數據並鎖存,然後選通第二行使其點亮一定的時間,然後熄滅;……第十六行之後又重新點亮第一行,這樣反復輪回。當這樣輪回的速度足夠快時(每秒24次以上),由於人眼的視覺暫留現象,就能看到顯示屏上穩定的圖形。採用串列傳輸方案,控制電路可以只用一根信號線,將列數據一位一位傳往列驅動器,在硬體方面,這無疑是十分經濟的。但是,串列傳輸過程較長,數據按順序一位一位地輸出給列驅動器,只有一行的各列數據都已傳輸到位之後,這一行的各列才能並行地進行顯示。這樣,對於一行的顯示過程就可以分解成列數據准備(傳輸)和列數據顯示兩部分。對於串列傳輸方式來說,列數據准備時間可能相稱長,在行掃描周期確定的情況下,留給行顯示的時間就太少了,以至影響LED的亮度。為解決串列傳輸中列數據准備與列數據顯示的時間矛盾問題,可以採用重疊處理的方法,即在顯示本行各列數據的同時,傳送下一行的列數據。為達到重疊處理的目的,列數據的顯示就需要具有鎖存功能。經過上述的分析,可以歸納出列驅動器電路應具備的主要功能。對於列數據准備來說,它應能實現串入並出的移位功能;對於列數據顯示來說,應具有並行鎖存的功能。這樣,本行已准備好的數據送入並行鎖存器進行顯示時,串並移位寄存器就可以准備下一行的列數據,而會不影響本行的顯示。該顯示屏系統的原理框圖如圖2.1所示。
</SPAN></SPAN></SPAN></SPAN>
『捌』 關於LED 的C語言編程,就是用C語言編寫程序,用LED 顯示漢字時間數字之類的,要注意什麼,電路方面,編程
看手冊,把顯示每個數字的介面寫好,一般是移位的,然後想顯示什麼數字就調用哪個介面,沒什麼要注意的,耐心點就好
『玖』 求用c語言編程,控制at89s52流水燈程序,和控制led顯示數字
老大,這個程序你要自己寫啊,我給你思路。
LED閃爍的條件就是在對應的腳位上面出現_-_-_-_-_-_- 這樣的方波啊,語句就是P3_1 = ~P3_1;//比如p3.1上有顆led
花樣嗎你自己組合啊,在定時器裡面設置不同的頻率來改變方波的周期就可以做到了啊。在高級點的可以用PWM方法來控制漸亮和漸暗啊。祝你玩的愉快!
『拾』 編寫C語言程序,在「C語言編程訓練系統」上完成LED顯示功能
#include <stdio.h>
/* input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}