標(biāo)題:
這個(gè)單片機(jī)程序怎樣跳出第三個(gè)while循環(huán)?幫忙看一下
[打印本頁]
作者:
gpm
時(shí)間:
2018-12-3 00:58
標(biāo)題:
這個(gè)單片機(jī)程序怎樣跳出第三個(gè)while循環(huán)?幫忙看一下
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit SHCP=P3^6;//595的移位信號(hào)
sbit STCP=P3^5;//是595的鎖存信號(hào)
sbit SDA=P3^4;//紅數(shù)據(jù)
sbit IA=P1^0;//行控制線A
sbit IB=P1^1;//行控制線B
sbit IC=P1^2;//行控制線C
/********************************************************************/
#define scan0 {IA=0;IB=0;IC=0;}
#define scan1 {IA=1;IB=0;IC=0;}
#define scan2 {IA=0;IB=1;IC=0;}
#define scan3 {IA=1;IB=1;IC=0;}
#define scan4 {IA=0;IB=0;IC=1;}
#define scan5 {IA=1;IB=0;IC=1;}
#define scan6 {IA=0;IB=1;IC=1;}
#define scan7 {IA=1;IB=1;IC=1;}
#define light 3
extern uint uiAllData; //定義亮度
uchar code hanzi[]; //漢字字模
uchar Move,Speed,line,tome_count; //(移位 速度 行 ) 定義
uint zimuo; //字模計(jì)數(shù)器
uint uiAllData;
uchar BUFF[10]; //緩存
void DelayMs(void); // 延時(shí)
void in_data(); // 調(diào)整移動(dòng)數(shù)據(jù)
void rxd_data(); // 發(fā)送移動(dòng)數(shù)據(jù)
uchar time_count=0; //計(jì)數(shù)
void rxd_data1(); // 發(fā)送移動(dòng)數(shù)據(jù)
/******************************************************/
/*****不影響其他端口的掃描*************************/
void scan(unsigned char Value)
{switch(Value)
{ case 0: scan0;break;
case 1: scan1;break;
case 2: scan2;break;
case 3: scan3;break;
case 4: scan4;break;
case 5: scan5;break;
case 6: scan6;break;
case 7: scan7;break;
default:break;
}
}
/**************************延時(shí)***********************/
void DelayMs(void)
{
uchar TempCyc;
for(TempCyc=250;TempCyc>1;TempCyc--)
{;}
}
/********************************************/
/*主函數(shù)*/
void main()
{
Move=0;
zimuo=0;
while(1)
{
//利用sizeof()語句 運(yùn)算字幕有效數(shù)據(jù)的總數(shù);
while(zimuo<1024)//2048)//定義顯示字幕數(shù)據(jù)的長(zhǎng)度 2048/32=64 即顯示完64個(gè)16*16大小的字符后 重新循環(huán)
{
while(Move<16) //數(shù)據(jù)移位。
{
for(Speed=0;Speed<3;Speed++) //移動(dòng)速度控制
{
for(line=0;line<8;line++)
{
in_data(); //調(diào)整移動(dòng)數(shù)據(jù)
rxd_data(); //裝載移動(dòng)數(shù)據(jù)
scan(line); //輸出行掃描
STCP=1;//鎖存
STCP=0;
DelayMs(); //延時(shí),等待一段時(shí)間,讓這列顯示的內(nèi)容在人眼內(nèi)產(chǎn)生“視覺暫留”現(xiàn)象。
DelayMs();
}
}
Move++; //移動(dòng)一步
}
Move=0;
zimuo=zimuo+64; //換下一個(gè)字 這里不在移動(dòng)地址 就實(shí)現(xiàn)了靜態(tài)顯示
}
TMOD=0x01; //定時(shí)器0 16位定時(shí)定時(shí)器1方式2
TH0=0x4c; //50ms
TL0=0x00;
TR0=1; //開定時(shí)器計(jì)數(shù)
ET0=1; //開定時(shí)器中斷
EA=1; //開中斷
while(tome_count<9) //怎么樣跳出這個(gè)循環(huán)????????
{
}
zimuo=0;
}
}
/**********************************************************/
void in_data(void) //調(diào)整數(shù)據(jù)一個(gè)屏2個(gè)字的數(shù)據(jù)
{
char s;
for(s=2;s>=0;s--) //一個(gè)屏能顯示4個(gè)字 取最前面的字發(fā)送給595的最前面
{ //zimuo 是個(gè)計(jì)算顯示到哪個(gè)字的計(jì)數(shù)器 s是取4個(gè)字的循環(huán) line是顯示到哪一行 根據(jù)這幾個(gè)參數(shù)計(jì)算出一個(gè)屏中現(xiàn)在需要顯示的數(shù)據(jù) 放入BUFF 內(nèi)存中 等待發(fā)送給595
BUFF[2*s]=hanzi[zimuo+32*s+2*line]; //要知道為什么這么算就需要知道取模的方向和原理 一行有8個(gè)字節(jié) (一個(gè)中文16*16的字 一行有2個(gè)字節(jié))
BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*line];//把一個(gè)字的首字節(jié)放入BUFF[0]中 后面一個(gè)字節(jié)放入BUFF[1] 以此類推剩下的3個(gè)字
}
}
/***********************發(fā)送移動(dòng)的數(shù)據(jù)****************************/
void rxd_data(void) //串行發(fā)送數(shù)據(jù)
{
uchar s;
uchar temp,k;
for(s=0;s<4;s++) //發(fā)送4字節(jié)數(shù)據(jù)
{
temp=BUFF[s];
temp=255-temp;
SDA=0;
for(k=0;k<8;k++)//一個(gè)字節(jié)8位 發(fā)送給595
{
SHCP=0; //上升沿移位595
SDA=(bit)(temp&0x01);//通過IO口送一個(gè)位給 595 0x01
temp=temp>>1; //字節(jié)移位 準(zhǔn)備送下一位
SHCP=1;
}
}
}
void Timer0Interrupt(void) interrupt 1 //定時(shí)器中斷
{
TH0 = 0x04C;//定時(shí)50MS 這里的晶振是18.432M 測(cè)試無需理會(huì)晶振大小
TL0 = 0x000;
time_count++;
if(time_count>8)//發(fā)送一次數(shù)據(jù)
{
time_count=0;
line++; //下一行
if(line>8) //共16行
{
line=0; //重新移動(dòng)
}
rxd_data1();//發(fā)送數(shù)據(jù)
scan(line); //打開行掃描
STCP=1;//鎖存
STCP=0;
}
}
void rxd_data1(void) //串行發(fā)送數(shù)據(jù)
{
uchar s;
uchar k;
for(s=0;s<4;s++)//發(fā)送4字節(jié)數(shù)據(jù) 一行4個(gè)字節(jié)
{
for(k=0;k<8;k++) //一個(gè)字節(jié)8位
{
SHCP=0; //上降沿移位595
SDA=1;
SHCP=1;
}
}
}
const uchar code hanzi[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"未命名文件",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"未命名文件",0*/
0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,/*"未命名文件",0*/
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,/*"未命名文件",0*/
0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,/*"未命名文件",0*/
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,/*"未命名文件",0*/
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,/*"未命名文件",0*/
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,/*"未命名文件",0*/
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*"未命名文件",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"未命名文件",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"未命名文件",0*/
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,/*"未命名文件",0*/
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,/*"未命名文件",0*/
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"未命名文件",0*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"未命名文件",0*/
};
復(fù)制代碼
作者:
謝小康4
時(shí)間:
2018-12-3 08:39
當(dāng)while()中的語句為真時(shí),執(zhí)行一遍{}里的內(nèi)容,直到()內(nèi)不為真,退出該循環(huán),執(zhí)行下一步指令
作者:
phang
時(shí)間:
2018-12-3 09:45
第3個(gè)while里Move++,加到=16跳出來,又被你Move=0了,那就被你摁在第2和第3個(gè)while了。。
作者:
yousunny
時(shí)間:
2018-12-3 09:53
Move++; //移動(dòng)一步
這里一直加,到最后,肯定就跳出循環(huán)了
作者:
xuyaqi
時(shí)間:
2018-12-3 09:59
這是循環(huán)成立的條件:while(Move<16)
每循環(huán)一次 Move++;
循環(huán)16次,就不滿足循環(huán)條件,跳出循環(huán)。
作者:
冰冰潔潔
時(shí)間:
2018-12-3 10:34
while(tome_count<9) //怎么樣跳出這個(gè)循環(huán)????????
{
}
zimuo=0;
}
}這個(gè)不是定義嗎,while(tome_count<9),就是計(jì)數(shù)大于9后為假,跳出。
作者:
gpm
時(shí)間:
2018-12-3 11:18
是第四個(gè)while循環(huán)出不來
作者:
15779064856
時(shí)間:
2018-12-3 12:20
這是循環(huán)成立的條件:while(Move<16) 每循環(huán)一次 Move++; 循環(huán)16次,就不滿足循環(huán)條件,就是讓循環(huán)的條件不滿足循環(huán)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1