花樣c語言
㈠ 怎樣用C語言先輸出一段文字,再輸出心形圖案
學習C語言其實並不是枯燥無味的,也有蠻多好玩的
代碼如下:
#include <stdio.h>int main()
{
int i,j;printf(" ****** ****** "
" ********** ********** "
" ************* ************* ");//前三排的規律性不強 所以直接顯示就好了
for(i=0;i<3;i++)//顯示中間三排
{
for(j=0;j<29;j++)
printf("*");
printf(" ");
}for(i=0;i<7;i++)//顯示呈遞減趨勢規律的中間7排
{
for(j=0;j<2*(i+1)-1;j++)
printf(" ");
for(j=0;j<27-i*4;j++)
printf("*");
printf(" ");
}for(i=0;i<14;i++)//最後一個星號*與上面的規律脫節了 所以獨立顯示
printf(" ");
printf("* ");
return 0;
}
就是我用C語言寫的心形圖案,花樣心形圖案,主要是用for語句寫的,有興趣的朋友可能試下
㈡ 單片機控制8盞燈花樣亮法C語言編程怎麼寫
只要你搞懂原理了就不難,這個最好和定時器同時用。
假設先亮第一種,延時一段時間;關第一種,亮第二種,延時一段時間……依次類推,就能實現花樣亮法
㈢ 單片機花樣流水燈C語言問題
#include<reg52.h> //包含頭文件,一般情況不需要改
void Delay(unsigned int t); //函數聲明
/*------------------------------------------------
主函數
------------------------------------------------*/
void main (void)
{
unsigned char i,j,temp; //定義一個無符號字元型局部變數 i 取值范圍 0~255
Delay(50000);
P1=0xfe; //賦初始值
while (1) //主循環
{
/**********下面是從1~8閃爍兩次*****/
for(i=0;i<8;i++) //加入 for循環,表明for循環大括弧中的程序循環執行8次
{
temp=P1;
for(j=0;j<2;j++)
{
Delay(50000);
P1=0xff;
Delay(50000);
P1=temp;
}
P1<<=1;
P1=P1|0x01; //左移後,最右端自動賦值0,所以需要該語句賦值1
}
P1=0xfe; //重新賦初始值
/*********下面是從1~8閃爍一次*********/
for(i=0;i<8;i++)
{
Delay(50000);
P1<<=1;
P1=P1|0x01;
}
/********下面是全部閃爍兩次********/
for(i=0;i<2;i++)
{
P1=0x00;
Delay(50000);
P1=0xff;
}
P1=0xfe; //重新初始化P1
//主循環中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延時函數,含有輸入參數 unsigned int t,無返回值
unsigned int 是定義無符號整形變數,其值的范圍是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}/*-----------------------------------------------
名稱:IO口高低電平控制
論壇:www.doflye.net
編寫:shifang
日期:2009.5
修改:無
內容:循環左移,始終一個led點亮,並循環執行流水動作,左移符號 << 邏輯或符號 |
------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
void Delay(unsigned int t); //函數聲明
/*------------------------------------------------
主函數
------------------------------------------------*/
void main (void)
{
unsigned char i,j,temp; //定義一個無符號字元型局部變數 i 取值范圍 0~255
Delay(50000);
P1=0xfe; //賦初始值
while (1) //主循環
{
/**********下面是從1~8閃爍兩次*****/
for(i=0;i<8;i++) //加入 for循環,表明for循環大括弧中的程序循環執行8次
{
temp=P1;
for(j=0;j<2;j++)
{
Delay(50000);
P1=0xff;
Delay(50000);
P1=temp;
}
P1<<=1;
P1=P1|0x01; //左移後,最右端自動賦值0,所以需要該語句賦值1
}
P1=0xfe; //重新賦初始值
/*********下面是從1~8閃爍一次*********/
for(i=0;i<8;i++)
{
Delay(50000);
P1<<=1;
P1=P1|0x01;
}
/********下面是全部閃爍兩次********/
for(i=0;i<2;i++)
{
P1=0x00;
Delay(50000);
P1=0xff;
}
P1=0xfe; //重新初始化P1
//主循環中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延時函數,含有輸入參數 unsigned int t,無返回值
unsigned int 是定義無符號整形變數,其值的范圍是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
我用的是P1埠,當埠為低電平時點亮LED
㈣ 我想知道這個單片機花樣流水燈正確的的C語言程序,你能發給我嗎
#include<reg51.h>
#define uchar unsigned char
sbit key=P3^3;
uchar led=0x01;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
while(1)
{
while(key==0)
{
P2=0x55;
delay(100);
P2=0xaa;
delay(100);
}
while(key==1)
{
P2=led;
led=led<<1;
if(led=0x00)led=0x01;
delay(100);
}
}
}
㈤ 設計一個左移到頭接著右移,右移到頭再左移的花樣流水燈程序,C語言
main(){unsignedcharled[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedchara=0;while(1){for(a=0;a<8;a++){Pn(燈的IO)=led[a];}for(a=7;a<=0;a--){Pn(燈的IO)=led[a];}}}
㈥ 能否幫忙做個花樣流水燈,液晶能顯示歌曲名的C語言程序
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar clock_array1[]=;
uchar clock_array2[]=;
uchar shi,fen,miao,lian,yue,ri,xing;
void init();
sbit rs=P2^2;
sbit rw=P2^1;
sbit en=P2^0;
sbit dscs=P2^7;
sbit dsas=P2^6;
sbit dsrw=P2^5;
sbit dsds=P2^4;
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
for(j=0;j<120;j++);
}
void command (uchar com)
{
rs=0;
rw=0;
P0=com;
delay(5);
en=1;
delay(5);
en=0;
}
void data1(uchar data1)
{
rs=1;
rw=0;
P0=data1;
delay(5);
en=1;
delay(5);
en=0;
}
void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
command(0x80+add);
data1(0x30+shi);
data1(0x30+ge);
}
void write_lyr(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
command(0x80+0x40+add);
data1(0x30+shi);
data1(0x30+ge);
}
void write_xing(uchar add,uchar date)
{
uchar ge;
ge=date%10;
command(0x80+0x40+add);
data1(0x30+ge);
}
void ds_write(uchar add,uchar data2) //寫數據
{
dscs=0;
dsas=1;
dsds=1;
dsrw=1;
P1=add;
dsas=0;
dsrw=0;
P1=data2;
dsrw=1;
dsas=1;
dscs=1;
}
uchar ds_read(uchar add) //讀數據
{
uchar ds_date;
dsas=1;
dsds=1;
dsrw=1;
dscs=0;
P1=add;
dsas=0;
dsds=0;
P1=0xff;
ds_date=P1;
dsds=1;
dsas=1;
dscs=1;
return ds_date;
}
void init()
{
uchar i;
command(0x01);
command(0x38); //設顯示模式
command(0x0c); //開顯示
for(i=0;i<14;i++)
{
data1(clock_array1[i]);
delay(10);
}
command(0x80+0x40);
for(i=0;i<14;i++)
{
data1(clock_array2[i]);
delay(10);
}
}
void main()
㈦ C語言C51單片機花樣流水燈程序分析注釋
和你說一句關鍵的(別告我你整個程序一句都看不懂):
P1=0xfe;
0xfe是十六進製表示的數,二進制就是1111 1110,通過你的程序和相關注釋可以看出,硬體上你有8個led燈連接P1口,且這些led是低電平亮。P1=0xfe(1111 1110)也就是表示七個燈滅,一個燈亮。接下來的代碼就是讓P1數據0xfe左移且低位補1,移一次就是1111 1101,、兩次就是1111 1011,三次是1111 0111。。。以此類推,可以看出它是0由最低位到最高位依次移過去的,而剛說了0表示led亮,這也就是led從一邊到另一邊依次點亮的效果。
後面的代碼按我上面說的自己理解,完全對你解釋太麻煩,對你也沒多大好處,只有你自己理解了才能學好單片機
㈧ 單片機C語言 兩個按鍵控制8位花樣流水燈,P1.0接按鍵k1,P1.1接按鍵k2,P0口的8位接8個發光二極體
匯編程序如下:
; 花樣流水燈(8個發光二極體以各種形式循環點亮)
; 功能:流水燈(8個發光二極體循環以1S間隔以各種形式循環點亮)
ORG H ;偽指令,指定程序從H開始存放
LJMP MAIN ;跳轉指令,程序跳轉至MAIN處執行
ORG H ;偽指令,指定程序從H開始存放
MAIN: MO SP, #60H ;給堆棧指針賦初值
MO P1,#0FFH ;給P1口賦值
MO DPTR,#TABLE;查表
LIGHT: MO R4,#42 ;設置循環次數
LOOP: MO A,#42 ;給A賦初值
SUBB A,R4 ;將A的值與R4的值相減,結果存在A中
MOC A,@A+DPTR ;將A+DPTR的值所對應的TABLE中的值賦給A
MO P1,A ;將A的值賦給P1口
LCALL DEL1S ;調用1S延時子程序
DJNZ R4,LOOP ;判斷R4是否為0,不為0跳轉,為0順序執行
LJMP LIGHT ;跳轉指令,跳轉至LIGHT處繼續執行
;1S延時子程序(11.MHz晶振,誤差0微秒)
DEL1S: MO R5, #H
DL1S0: MO R6, #0A4H
DL1S1: MO R7, #H
DJNZ R7, $
DJNZ R6, DL1S1
DJNZ R5, DL1S0
RET
TABLE: ;定義表格數據
DB 0FFH ;全滅
DB 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 07FH ;依次逐個點亮
DB 0FEH 0FCH 0F8H 0F0H 0E0H 0C0H H H ;依次逐個疊加
DB H 0C0H 0E0H 0F0H 0F8H 0FCH 0FEH 0FFH ;依次逐個遞減
DB 07EH 0BDH 0DBH 0E7H 0E7H 0DBH 0BDH 07EH ;兩邊靠攏後分開
DB 07EH 03CH H H H H 03CH 07EH ;兩邊疊加後遞減
DB H ;全亮
END ;程序結束指令
C語言程序如下:
/* 該實驗是花樣流水燈(8個發光二極體以各種方式循環點亮),功能是花樣流水燈(8個發光二極體以1S間隔以各種方式循環點亮) */
#include//包含reg.52文件
#define uint unsigned int//宏定義
#define uchar unsigned char//宏定義
void delay(uint z);//聲明延時函數
uint a;//定義循環用變數
uchar code table[]={
0xff,//全滅
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐個點亮
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐個疊加
0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐個遞減
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//兩邊靠攏後分開
0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//兩邊疊加後遞減
0x00,//全亮
;//¶¨ҥѭ»·Ӄʽ¾ݱ
/*Aµď֏ȊLj«ð£¬ȻºΖぁ£¬ȻºΖ
ȻºΖݼ»º߿¿£ºª£¬Ȼºߵݼ
ºa£ѭ»·£¡*/
void in()//inº¯ʽ
{
a=0;//¸
while(1)//whileѭ»·
{
P1=table[a];//½«a˹ԚµableµĖµ¸³¸
delay();//1Sѓʱד³̐ɠ a ;//aµĖµ¼Ӓ»
if(a==42)//²⊔aʇ·Ƥ2
a=0;//¸µ
}
}
void delay(uint z)//1msѓʱד³̐¨¹±䑓ʱʱ¼F{
uint x,y;
for(x=z;x
㈨ 用C語言編寫一個花樣流水燈的程序及此程序的流程圖
設一個標志位flag, 以標志位的5種狀態對應發光二極體的5種工作狀態,如當flag=1;發光二極體工作在1,當flag=2;發光二極體工作在2,......!然後根據定時器定時功能,5秒到,刷新flag的值,程序如下;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;/*程序功能:定時5S到切換LED顯示狀態.
;作者:w418781840.2008.5.29 */
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FLAG BIT 30H ;定義標志位
ORG 0
LJMP MAIN
ORG 0BH
LJMP AGA
;;;;;;主程序;;;;;;;;;;;;
ORG 0030H
MAIN: MOV FLAG,#01H ;標志位清0
MOV TMOD,#01H ;賦值50MS
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#100 ;中斷100*50=5S
SETB EA
SETB ET0
SETB TR0
SJMP $
;;;;;;;;;中斷服務程序;;;;;;;;;;;;;;
AGA: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,LOOP ;5S到否?否,返回
INC FLAG ;到,標志加1
MOV A,FLAG
CJNE A,#05,L1 ;掃描5種狀態了否?
MOV FLAG,#01H ;是,歸0,重新開始
;;;;;;;;;切換程序;;;;;;;;;;;;
L1: CJNE A,#01H,L2 ;判斷是否是狀態1?否,轉判斷2
LCALL LED1 ;是,調有狀態1
SJMP LOOP ;返回
L2: CJNE A,#02H,L3 ; 以下跟上面判斷相同
LCALL LED2
SJMP LOOP
L3: CJNE A,#03H,L4
LCALL LED3
SJMP LOOP
L4: CJNE A,#04H,L5
LCALL LED4
SJMP LOOP
L5: CJNE A,#05H,LOOP
LCALL LED5
LOOP: RETI
;;;;;;LED子程序區;;;;;;;;;;
LED1: RET
LED2: RET
LED3: RET
LED4: RET
LED5: RET
/////////////////
///////////////////////////////
/*程序功能:定時5S到切換LED顯示狀態.
作者:w418781840.2008.5.29 */
//========聲明區===========
#include <reg51.h>
unsigned char count=0;
unsigned char flag=1;
void led1(void);
void led2(void);
void led3(void);
void led4(void);
void led5(void);
//=========函數=========
main()
{ TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{ switch(flag)
{ case 1:led1();break;
case 2:led1();break;
case 3:led1();break;
case 4:led1();break;
case 5:led1();break;
}
}
}
//==========中斷服務============
void timer0(void) interrupt 1
{ TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++count==100)
{ count=0;
flag++;
if(flag==5)
flag=1;
}
}
//========5種狀態函數區=========