⑴ 51單片機C語言這個是什麼意思啊
定義一個了一uchar類型的變數 temp1,和一個uchar類型的數組,數組包含10個元素。0X開頭表示16進制的數字。 例如:0X81 = 129。 從名字來看,uchar應該是 unsigned char的意思,即無符號的char類型(1個byte),表示的數值范圍是 0 ~ 255。
⑵ 51單片機C語言編程
你的設計有點問題,不過你看下這個程序對你應該有幫助。
#include <reg52.h>
#define int8 unsigned char
#define int16 unsigned int
#define int32 unsigned long
int8 flag;
int8 n;
int8 code table[][32]={
{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},/* " " */
{0x04,0x28,0x08,0x24,0x32,0x22,0xC2,0x21,0xC2,0x26,0x34,0x38,0x04,0x04,0x08,0x18,0x30,0xF0,0xC0,0x17,0x60,0x10,0x18,0x10,0x0C,0x14,0x06,0x18,0x04,0x10,0x00,0x00},/*"歡",0*/
{0x02,0x02,0x04,0x82,0xF8,0x73,0x04,0x20,0x02,0x00,0xE2,0x3F,0x42,0x20,0x82,0x40,0x02,0x40,0xFA,0x3F,0x02,0x20,0x42,0x20,0x22,0x20,0xC2,0x3F,0x02,0x00,0x00,0x00},/*"迎",1*/
{0x00,0x01,0x04,0x02,0x1C,0x0C,0xC0,0x3F,0x1C,0xC0,0x02,0x09,0x02,0x16,0x92,0x60,0x4A,0x20,0x82,0x2F,0x02,0x20,0x0E,0x24,0x00,0x22,0x90,0x31,0x0C,0x20,0x00,0x00},/*"您",2*/
{0x44,0x10,0x44,0x14,0x88,0x54,0x88,0x54,0xD0,0x5F,0x30,0x50,0x60,0x50,0xFE,0x7F,0x40,0x50,0x20,0x90,0xB0,0x9F,0x98,0x92,0x8C,0x94,0x88,0x34,0x80,0x11,0x00,0x00},/*"乘",3*/
{0x82,0x00,0x02,0x01,0x22,0x06,0x22,0x38,0x22,0x04,0x22,0x03,0x22,0x00,0xFE,0xFF,0xA2,0x00,0x22,0x01,0x22,0x02,0x22,0x3C,0x22,0x02,0x02,0x01,0x02,0x00,0x00,0x00},/*"坐",4*/
{0x02,0x00,0x0C,0x00,0xF0,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0xA0,0x00,0x60,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00},/*"廣",5*/
{0x80,0x00,0x01,0x07,0x06,0x00,0x18,0x00,0xE0,0xFF,0x00,0x04,0x00,0x03,0x00,0x00,0xFE,0x7F,0x00,0x08,0x00,0x06,0x80,0x01,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00},/*"州",6*/
{0x00,0x00,0x04,0x20,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x20,0x04,0x00,0x00,0x00},/*"三",7*/
{0x20,0x08,0x20,0x86,0x7F,0x60,0x80,0x0F,0x00,0x04,0x00,0x1A,0x00,0xEA,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2A,0xF0,0x2B,0x0C,0x28,0x02,0x20,0x0F,0x00,0x00,0x00},/*"汽",8*/
{0x00,0x00,0x80,0x00,0x04,0x01,0x0E,0x02,0x14,0x0C,0x24,0x70,0xC4,0x21,0x8C,0x00,0x08,0x00,0x08,0x70,0x28,0x08,0x1E,0x06,0x0C,0x03,0x80,0x01,0x00,0x01,0x00,0x00},/*"公",9*/
{0x00,0x00,0x00,0x08,0xF8,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0xF0,0x49,0x00,0x48,0x04,0x40,0x02,0x40,0xFC,0x7F,0x00,0x00,0x00,0x00},/*"司",10*/
{0x00,0x00,0x80,0x00,0x04,0x01,0x0E,0x02,0x14,0x0C,0x24,0x70,0xC4,0x21,0x8C,0x00,0x08,0x00,0x08,0x70,0x28,0x08,0x1E,0x06,0x0C,0x03,0x80,0x01,0x00,0x01,0x00,0x00},/*"公",11*/
{0x40,0x00,0x40,0x08,0x41,0x08,0x42,0x08,0x4C,0x08,0xF8,0x7F,0x50,0x08,0x40,0x08,0x40,0x08,0x60,0x08,0xD0,0x7F,0x4C,0x08,0x47,0x08,0x42,0x08,0x40,0x00,0x00,0x00},/*"共",12*/
{0x20,0x08,0x20,0x86,0x7F,0x60,0x80,0x0F,0x00,0x04,0x00,0x1A,0x00,0xEA,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2A,0xF0,0x2B,0x0C,0x28,0x02,0x20,0x0F,0x00,0x00,0x00},/*"汽",13*/
{0x20,0x00,0x20,0x20,0x20,0x21,0x20,0x23,0x20,0x25,0x20,0x39,0x20,0xE1,0x20,0x21,0xFF,0x2F,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x00,0x00,0x00},/*"車",14*/
{0x00,0x00,0x00,0x00,0x1A,0x00,0x1C,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},/*",",15*/
{0x00,0x04,0x01,0x04,0x02,0x04,0x04,0x04,0x08,0x04,0x30,0x04,0xC0,0x05,0x00,0xFE,0x80,0x05,0x60,0x04,0x10,0x04,0x0C,0x04,0x06,0x04,0x03,0x04,0x02,0x04,0x00,0x00},/*"大",16*/
{0x00,0x02,0x40,0x0C,0x40,0x08,0x40,0x48,0x40,0x3A,0x40,0x2A,0x42,0x0A,0x41,0x8A,0xFE,0x7A,0x40,0x2B,0x40,0x0A,0x40,0x18,0x40,0xEA,0x40,0x4C,0x40,0x08,0x00,0x00},/*"學",17*/
{0x20,0x08,0x30,0x08,0xE0,0xFF,0x42,0x08,0x4C,0x08,0xF0,0x1F,0x10,0x12,0x1A,0x12,0xF2,0x13,0x04,0x10,0xC8,0xFF,0x30,0x10,0xCC,0x50,0x02,0x37,0x1C,0x12,0x00,0x00},/*"城",18*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x14,0x10,0x24,0x10,0x44,0x10,0x84,0x11,0x0C,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"2",0*/
{0x04,0x02,0x44,0x06,0xC4,0x1A,0x48,0xE3,0x48,0x46,0x48,0x00,0x04,0x09,0x04,0x09,0x08,0x09,0xC8,0xFF,0x30,0x09,0x28,0x49,0x44,0x39,0x02,0x29,0x1F,0x01,0x00,0x00},/*"線",19*/
{0x00,0x02,0x02,0x42,0x04,0x42,0x08,0x42,0x30,0x42,0xC0,0x7F,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0xFE,0x7F,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x00},/*"開",20*/
{0x40,0x04,0x80,0x08,0x00,0x11,0xFF,0xEF,0x00,0x44,0x02,0x10,0x82,0x10,0x82,0x10,0x82,0x90,0xFE,0x7F,0x82,0x50,0x82,0x10,0x82,0x10,0x82,0x10,0x02,0x10,0x00,0x00},/*"往",21*/
{0x00,0x04,0x01,0x04,0x02,0x04,0x04,0x04,0x08,0x04,0x30,0x04,0xC0,0x05,0x00,0xFE,0x80,0x05,0x60,0x04,0x10,0x04,0x0C,0x04,0x06,0x04,0x03,0x04,0x02,0x04,0x00,0x00},/*"大",22*/
{0x00,0x02,0x40,0x0C,0x40,0x08,0x40,0x48,0x40,0x3A,0x40,0x2A,0x42,0x0A,0x41,0x8A,0xFE,0x7A,0x40,0x2B,0x40,0x0A,0x40,0x18,0x40,0xEA,0x40,0x4C,0x40,0x08,0x00,0x00},/*"學",23*/
{0x20,0x08,0x30,0x08,0xE0,0xFF,0x42,0x08,0x4C,0x08,0xF0,0x1F,0x10,0x12,0x1A,0x12,0xF2,0x13,0x04,0x10,0xC8,0xFF,0x30,0x10,0xCC,0x50,0x02,0x37,0x1C,0x12,0x00,0x00},/*"城",24*/
{0x00,0x00,0x00,0x00,0x1A,0x00,0x1C,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},/*",",25*/
{0x00,0x02,0x00,0x42,0x00,0x32,0xFE,0x23,0x04,0x00,0x08,0x44,0xFF,0x55,0x50,0x55,0x50,0x55,0x50,0xFD,0x52,0x55,0x51,0x55,0xFE,0x55,0x00,0x44,0x00,0x04,0x00,0x00},/*"請",26*/
{0x00,0x01,0x04,0x02,0x1C,0x0C,0xC0,0x3F,0x1C,0xC0,0x02,0x09,0x02,0x16,0x92,0x60,0x4A,0x20,0x82,0x2F,0x02,0x20,0x0E,0x24,0x00,0x22,0x90,0x31,0x0C,0x20,0x00,0x00},/*"您",27*/
{0x82,0x00,0x02,0x01,0x22,0x06,0x22,0x38,0x22,0x04,0x22,0x03,0x22,0x00,0xFE,0xFF,0xA2,0x00,0x22,0x01,0x22,0x02,0x22,0x3C,0x22,0x02,0x02,0x01,0x02,0x00,0x00,0x00},/*"坐",28*/
{0x01,0x08,0xC2,0x08,0x44,0x0F,0x28,0xF8,0x30,0x08,0xCE,0x0F,0x04,0x01,0x00,0x41,0x02,0x41,0x01,0x41,0xFE,0x4F,0x00,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x00},/*"好",29*/
{0x42,0x08,0x81,0x08,0xFE,0xFF,0x00,0x09,0x01,0x0A,0x01,0x01,0x02,0x11,0x0C,0x11,0x30,0x11,0xC0,0xFF,0x30,0x11,0x08,0x11,0x06,0x11,0x03,0x11,0x02,0x01,0x00,0x00},/*"扶",30*/
{0x20,0x08,0xC0,0x48,0x00,0x4B,0xFF,0x7F,0x00,0x89,0x9C,0x88,0x00,0x10,0xBC,0x2A,0x82,0xCA,0xC2,0x4A,0xB2,0x5A,0x82,0x6A,0xAE,0x0A,0x90,0x0F,0x0C,0x00,0x00,0x00},/*"穩",31*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",32*/
{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}/* " " */
};
void delay(void);
int16 offset;
void main(void)
{
int8 i;
int8 *p;
flag=0x10;
n=0;
TMOD=0x01;
TH0=0xb1;
TL0=0xe0;
ET0=1;
EA=1;
TR0=1;
p=&table[0][0];
while (1)
{
for (i=0;i<8;i++) //顯示左半邊屏幕
{
P0=*(p+offset+2*i);
P2=i|0x08; //P2.4=0,P2.3=1 選中U2, 輸出掃描碼給U6
delay();
P0=*(p+offset+2*i+1);
P2=i|0x10; //P2.4=1,P2.3=0 選中U3, 輸出掃描碼給U7
delay();
}
for (i=8;i<16;i++) //顯示右半邊屏幕
{
P0=*(p+offset+2*i);
P2=(i-8)|0x20; //P2.5=1 P2.4=0, P2.3=0 選中U4,輸出掃描碼U8
delay();
P0=*(p+offset+2*i+1);
P2=(i-8)|0x40; //P2.6=1 P2.5=0, P2.4=0 選中U5,輸出掃描碼U9
delay();
}
}
}
void delay(void)
{
int16 i;
for (i=0;i<50;i++)
;
}
void timer0() interrupt 1 using 3
{
TF0=0;
TH0=0xb1;
TL0=0xe0;
if (n<10)
{
n++;
}
else
{
offset+=2;
if (offset>1100)
offset=0;
n=0;
}
}
⑶ 51單片機 c語言中
#define POWER_UP_MARK 0xAB定義POWER_UP_MARK為0xAB 也就是說POWER_UP_MARK和0XAB等價,可以互換,
給個例子,如
struct student
{
int age;//定義年齡
string name;//定義姓名
};
student stu1;
這時候用stu1.age代表stu1對象的年齡
stu1.name代表stu1對象的姓名
⑷ 51單片機C語言中<<=和|=的意思是什麼
這兩個都是特殊的賦值運算符。這類運算符的形式為OP=,為雙目運算符,即需要左右都有操作表達式。其中左側必須為可改變值的變數,右側可以為任意表達式。
對於OP=的運算符,其含義為:
aOP=b; 等同於a = a OP b;
對於題目中涉及的兩個運算符,分別為:
a <<= b; 等效於a = a << b; 即a左移b位後賦值給a。
左移操作的規則為,高b位捨去,其它依次向高位(左側)移動b位,低b位添加0。
a|=b;等效於a=a|b;即a與b執行按位或操作,結果賦值給a。
或操作的規則為,按位執行,只有相同位上的值均為0時,結果的對應位上為0,否則結果對應位上為1。
⑸ 51單片機C語言比較
不太明白你說不用比較的意思
⑹ 51單片機c程序
如果前面程序定義了MONITOR51,則編譯後面一句,即在地址0X23開始定義只讀數組reserve[3]。相反,如果前面程序沒有定義MONITOR51,則後面一句不編譯。
⑺ 51單片機c語言
例如:
1、這樣單獨控制,理論上是先後亮的,但CPU跑的快,看起來是同時亮的
sbit led2=P1^1;
sbit led3=P1^2;
void main()
{
led1 = 0;
led2 = 0;
led3 = 0;
}
2、真正同時亮
void main()
{
P1=0xf8;
}
⑻ 51單片機C語言
你自己算一下不就行了?
⑼ 51單片機c語言sbit的作用是什麼
在51單片機中,不能直接使用P0^0=xxx操作,因為P0^0是地址值,即指針,P0指針地址值0x80,P0^0指針地址0x81,P0^0=xxx是修改指針地址,即0x81=xxx,明顯是錯誤的,我們想修改指針指向管腳值,必須使用位定義關鍵字sbit P00 = P0^0;然後P00=xxx,操作P00管腳值,即操作0x81指針指向的管腳P00的值。
⑽ 51單片機S系列與C系列有什麼區別
兩者主要的區別是AT89S51支持ISP(In System Programming,即「在線可編程」)。而AT89C51無此功能。
以下描述更加詳細:
很多初學51單片機的網友會有這樣的問題:AT89S51是什麼?書上和網路教程上可都是8051,89C51等!沒聽說過有89S51?!
這里,初學者要澄清單片機實際使用方面的一個產品概念,MCS-51單片機是美國INTE公司於1980年推出的產品,典型產品有 8031(內部沒有程序存儲器,實際使用方面已經被市場淘汰)、8051(晶元採用HMOS,功耗是630mW,是89C51的5倍,實際使用方面已經被市場淘汰)和8751等通用產品,一直到現在, MCS-51內核系列兼容的單片機仍是應用的主流產品(比如目前流行的89S51、89C51等),各高校及專業學校的培訓教材仍與MCS-51單片機作為代表進行理論基礎學習。
有些文獻甚至也將8051泛指MCS-51系列單片機,8051是早期的最典型的代表作,由於MCS-51單片機影響極深遠,許多公司都推出了兼容系列單片機,就是說MCS-51內核實際上已經成為一個8位單片機的標准。
其他的公司的51單片機產品都是和MCS-51內核兼容的產品而以。同樣的一段程序,在各個單片機廠家的硬體上運行的結果都是一樣的,如ATMEL的89C51(已經停產)、89S51, PHILIPS(菲利浦),和WINBOND(華邦)等,我們常說的已經停產的89C51指的是ATMEL公司的 AT89C51單片機,同時是在原基礎上增強了許多特性,如時鍾,更優秀的是由Flash(程序存儲器的內容至少可以改寫1000次)存儲器取帶了原來的ROM(一次性寫入),AT89C51的性能相對於8051已經算是非常優越的了。
不過在市場化方面,89C51受到了PIC單片機陣營的挑戰,89C51最致命的缺陷在於不支持ISP(在線更新程序)功能,必須加上ISP功能等新功能才能更好延續MCS-51的傳奇。89S51就是在這樣的背景下取代89C51的,現在,89S51目前已經成為了實際應用市場上新的寵兒,作為市場佔有率第一的Atmel目前公司已經停產AT89C51,將用AT89S51代替。89S51在工藝上進行了改進,89S51採用0.35新工藝,成本降低,而且將功能提升,增加了競爭力。89SXX可以像下兼容89CXX等51系列晶元。同時,Atmel不再接受89CXX的定單,大家在市場上見到的89C51實際都是Atmel前期生產的巨量庫存而以。如果市場需要,Atmel當然也可以再恢復生產AT89C51。
89S51相對於89C51增加的新功能包括:
-- 新增加很多功能,性能有了較大提升,價格基本不變,甚至比89C51更低!
-- ISP在線編程功能,這個功能的優勢在於改寫單片機存儲器內的程序不需要把晶元從工作環境中剝離。是一個強大易用的功能。
-- 最高工作頻率為33MHz,大家都知道89C51的極限工作頻率是24M,就是說S51具有更高工作頻率,從而具有了更快的計算速度。
-- 具有雙工UART串列通道。
-- 內部集成看門狗計時器,不再需要像89C51那樣外接看門狗計時器單元電路。
-- 雙數據指示器。
-- 電源關閉標識。
-- 全新的加密演算法,這使得對於89S51的**變為不可能,程序的保密性大大加強,這樣就可以有效的保護知識產權不被侵犯。
-- 兼容性方面:向下完全兼容51全部字系列產品。比如8051、89C51等等早期MCS-51兼容產品。也就是說所有教科書、網路教程上的程序(不論教科書上採用的單片機是8051還是89C51還是MCS-51等等),在89S51上一樣可以照常運行,這就是所謂的向下兼容。
比較結果:就如同INTEL的P3向P4升級一樣,雖然都可以跑Windows98,不過速度是不同的。從AT89C51升級到AT89S51 ,也是同理。和S51比起來,C51就要遜色一些,實際應用市場方面技術的進步是永遠向前的。
********上面這些就是AT89S51的由來********
下面是初學網友對51系列的選型的常見問題
1問:網友常見問題:請問現在學習51系列單片機應該選擇AT89C51還是89S51?
答:89C51和89S51內核相同,89S51針對89C51的明顯的幾個升級如下 ;
1.程序存儲器寫入方式:二者的寫入程序的方式不同,89C51隻支持並行寫入,同時需要VPP燒寫高壓。89S51則支持ISP在線可編程寫入技術!串列寫入、速度更快、穩定性更好,燒寫電壓也僅僅需要4~5V即可。
2.電源范圍:89S5*電源范圍寬達4~5.5V,而89C5*系列在低於4.8V和高於5.3V的時候則無法正常工作。
3.工作頻率:目前89S1*的性能遠高於89C5*,89S5*系列支持最高高達33MHZ的工作頻率,而89C51工作頻率范圍最高只支持到24M。
4.市場價格:由於89C51已經全面停產,所以在市場價格方面,庫存的89C5*的批發價格要比89S5*貴將近一倍!
5.兼容型:89S5*向下兼容89C5*,就是說用89S5*可以替代89C5*使用,同樣的程序,運行結果相同。就是說89S5*也同樣兼容目前所有的教科書范常式序。
6.加密功能:89S5*系列全新的加密演算法,這使得對於89S51的**變為不可能,程序的保密性大大加強,這樣就可以有效的保護知識產權不被侵犯。
7.抗干擾性:內部集成看門狗計時器,不再需要像89C51那樣外接看門狗計時器單元電路。
8.燒寫壽命更長:89S5*標稱的1000次,實際最少是1000次~10000次,這樣更有利初學者反復燒寫,減低學習成本。綜合上面的一些區別,個人認為89C51的停止使用只是時間問題而已,就象當年的8031。
2問:採用89C2051開發製造產品是不是要比用89S51更好?因為2051看起來體積比較小。
答:這個問題並不能一概而論,主要的區別如下:
1.功能差別:因為2051不是標準的51內核,所以205*的程序不能直接移植到51上。由於205*是精簡型,所以P口變得很少,這樣一來就只能用來做一些小的簡單產品,可利用資源比較緊張。實際上,做產品的話用205*是不一定合算的,除非是非常簡單的產品。
2.市場價格:由於89C2051的產量不是非常大,所以市場價格方面89C2051的批發價格和89S51比較接近!相對性能價格比就比較低。
3.產品體積:除非對產品的體積有苛刻的要求,否則二者的PCB面積相差不多,因為40腳的51晶元也有PLCC44小體積封裝。