Embedded C เป็นภาษาโปรแกรมที่ได้รับความนิยมมากที่สุดในด้านซอฟต์แวร์สำหรับการพัฒนาอุปกรณ์อิเล็กทรอนิกส์ โปรเซสเซอร์แต่ละตัวเชื่อมโยงกับซอฟต์แวร์ฝังตัว การเขียนโปรแกรม C ในตัว มีบทบาทสำคัญในการทำหน้าที่เฉพาะของโปรเซสเซอร์ ในชีวิตประจำวันของเราเรามักใช้อุปกรณ์อิเล็กทรอนิกส์มากมายเช่นเครื่องซักผ้าโทรศัพท์มือถือกล้องดิจิทัลเป็นต้นจะทำงานโดยใช้ไมโครคอนโทรลเลอร์ที่ตั้งโปรแกรมโดยฝังตัว C.
การเขียนโปรแกรมระบบฝังตัว
รหัส C ที่เขียนมีความน่าเชื่อถือพกพาและปรับขนาดได้มากกว่าและในความเป็นจริงแล้วเข้าใจง่ายกว่ามาก เครื่องมือแรกและสำคัญที่สุดคือซอฟต์แวร์ฝังตัวที่ตัดสินใจการทำงานของระบบฝังตัว ภาษาการเขียนโปรแกรม C แบบฝังถูกใช้บ่อยที่สุดสำหรับการเขียนโปรแกรมไมโครคอนโทรลเลอร์
สอนการเขียนโปรแกรม C ในตัว (8051)
สำหรับการเขียนโปรแกรมผู้ออกแบบแบบฝังต้องมีความรู้เพียงพอเกี่ยวกับฮาร์ดแวร์ของโปรเซสเซอร์หรือคอนโทรลเลอร์เฉพาะเนื่องจากการเขียนโปรแกรม C แบบฝังเป็นเทคนิคการเขียนโปรแกรมฮาร์ดแวร์ที่เกี่ยวข้องอย่างสมบูรณ์
สอนการเขียนโปรแกรม
ก่อนหน้านี้แอปพลิเคชันฝังตัวจำนวนมากได้รับการพัฒนาโดยใช้การเขียนโปรแกรมระดับแอสเซมบลี อย่างไรก็ตามพวกเขาไม่ได้ให้ความสะดวกในการพกพาเพื่อเอาชนะปัญหานี้ด้วยการถือกำเนิดของภาษาระดับสูงต่างๆเช่น C, COBOL และ Pascal อย่างไรก็ตามเป็นภาษาซีที่ได้รับการยอมรับอย่างกว้างขวาง การพัฒนาแอปพลิเคชันระบบฝังตัว และยังคงดำเนินต่อไป
ระบบฝังตัว
ระบบฝังตัวหมายถึงการรวมกันของซอฟต์แวร์การเขียนโปรแกรม C แบบฝังตัวและส่วนฮาร์ดแวร์ส่วนใหญ่ประกอบด้วยไมโครคอนโทรลเลอร์และมีจุดมุ่งหมายเพื่อทำงานเฉพาะ ระบบฝังตัวประเภทนี้ถูกนำมาใช้ในชีวิตประจำวันของเราเช่นเครื่องซักผ้าและเครื่องบันทึกวิดีโอตู้เย็นเป็นต้น ระบบฝังตัวถูกนำมาใช้ครั้งแรกโดยไมโครคอนโทรลเลอร์ 8051
ระบบฝังตัว
รู้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 8051
ไมโครคอนโทรลเลอร์ 8051 เป็นไมโครคอนโทรลเลอร์พื้นฐานซึ่งเปิดตัวครั้งแรกโดย ‘Intel Corporation’ ตั้งแต่ปี 1970 พัฒนาโดยสถาปัตยกรรมโปรเซสเซอร์ 8086 8051 เป็นตระกูลไมโครคอนโทรลเลอร์ซึ่งได้รับการพัฒนาโดยผู้ผลิตหลายรายเช่น Philips, Atmel, dalls และอื่น ๆ ไมโครคอนโทรลเลอร์ 8051 ถูกนำไปใช้ในผลิตภัณฑ์ฝังตัวมากมายตั้งแต่ของเล่นเด็กเล็กไปจนถึงระบบยานยนต์ขนาดใหญ่
ไมโครคอนโทรลเลอร์ 8051
ไมโครคอนโทรลเลอร์ 8051 คือ 8 บิต สถาปัตยกรรม 'CISC' . ประกอบด้วยหน่วยความจำการสื่อสารแบบอนุกรมอินเทอร์รัปต์พอร์ตอินพุต / เอาท์พุตและตัวจับเวลา / ตัวนับรวมอยู่ในชิปรวมตัวเดียวซึ่งถูกตั้งโปรแกรมให้ควบคุมอุปกรณ์ต่อพ่วงที่เชื่อมต่อ โปรแกรมจะถูกเก็บไว้ใน RAM ของไมโครคอนโทรลเลอร์ แต่ก่อนที่จะเขียนโปรแกรมเราต้องตระหนักถึงแรม องค์กร ของไมโครคอนโทรลเลอร์
การเขียนโปรแกรมระบบฝังตัว: การประกาศพื้นฐาน
ทุกฟังก์ชันคือชุดของคำสั่งที่ทำงานเฉพาะและการรวบรวมฟังก์ชันหนึ่งหรือหลายฟังก์ชันเรียกว่าภาษาโปรแกรม ทุกภาษาประกอบด้วยองค์ประกอบพื้นฐานและกฎทางไวยากรณ์ การเขียนโปรแกรมภาษาซีได้รับการออกแบบมาเพื่อทำงานร่วมกับชุดอักขระตัวแปรชนิดข้อมูลค่าคงที่คำสำคัญนิพจน์และอื่น ๆ ที่ใช้ในการเขียนโปรแกรม C สิ่งเหล่านี้ถือว่าอยู่ภายใต้ไฟล์ส่วนหัวหรือไฟล์ไลบรารีและแสดงเป็นไฟล์
# รวม
การพัฒนาโปรแกรม Embedded C
ส่วนขยายของภาษาซีเรียกว่าโปรแกรมภาษาซีแบบฝังตัว เมื่อเปรียบเทียบกับข้างต้นการเขียนโปรแกรมแบบฝังในภาษาซีมีคุณสมบัติเพิ่มเติมบางอย่างเช่นประเภทข้อมูลและคำสำคัญและไฟล์ส่วนหัวหรือไฟล์ไลบรารีจะแสดงเป็น
# รวม
คำหลักเพิ่มเติมในตัว C
- sbit
- นิดหน่อย
- SFR
- ระเหย
- มาโครกำหนด
“ sbit” ใช้สำหรับการประกาศ PIN เดียวของไมโครคอนโทรลเลอร์ ตัวอย่างเช่น LED เชื่อมต่อกับพิน P0.1 ไม่แนะนำให้ส่งค่าไปยังขาพอร์ตโดยตรงก่อนอื่นเราต้องประกาศพินด้วยตัวแปรอื่นหลังจากนั้นเราสามารถใช้ที่ใดก็ได้ในโปรแกรม
ไวยากรณ์: sbit a = P0 ^ 1 // ประกาศพินตามลำดับด้วยตัวแปร //
a = 0x01 // ส่งค่าไปยังขาพอร์ต //
'บิต' ใช้สำหรับตรวจสอบสถานะของตัวแปร
ไวยากรณ์: bit c // ประกาศตัวแปร bit //
c = a // ค่าถูกกำหนดให้กับตัวแปร c //
ถ้า (c == 1) // ตรวจสอบเงื่อนไขเป็นจริงหรือเท็จ //
{
… ..
……
}
คีย์เวิร์ด“ SFR” ใช้เพื่อเข้าถึงการลงทะเบียน SFR ด้วยชื่ออื่น การลงทะเบียน SFR กำหนดเป็นไฟล์ ลงทะเบียนฟังก์ชันพิเศษ จะมีการลงทะเบียนที่เกี่ยวข้องกับอุปกรณ์ต่อพ่วงทั้งหมดโดยระบุที่อยู่ การลงทะเบียน SFR ถูกประกาศโดยคำหลัก SFR คีย์เวิร์ด SFR ต้องเป็นตัวพิมพ์ใหญ่
ไวยากรณ์: พอร์ต SFR = 0x00 // 0x00 คือที่อยู่พอร์ต 0 ที่ประกาศโดยตัวแปรพอร์ต //
Port = 0x01 // จากนั้นส่งค่าไปยัง port0 //
ล่าช้า ()
พอร์ต = 0x00
ล่าช้า ()
คีย์เวิร์ด“ ระเหย” มีความสำคัญที่สุดในการพัฒนาระบบฝังตัว ไม่สามารถเปลี่ยนแปลงตัวแปรที่ประกาศด้วยค่าคีย์เวิร์ดที่เปลี่ยนแปลงได้โดยไม่คาดคิด สามารถใช้ในการลงทะเบียนอุปกรณ์ต่อพ่วงที่แมปหน่วยความจำตัวแปรส่วนกลางที่แก้ไขโดย ISR หากไม่ใช้คีย์เวิร์ดที่ลบเลือนในการส่งและรับข้อมูลจะเกิดข้อผิดพลาดของโค้ดหรือข้อผิดพลาดในการเพิ่มประสิทธิภาพ
ไวยากรณ์: volatile int k
มาโครเป็นชื่อที่ใช้เพื่อประกาศบล็อกของคำสั่งเป็นคำสั่งก่อนตัวประมวลผล เมื่อใดก็ตามที่ใช้ชื่อนั้นจะถูกแทนที่ด้วยเนื้อหาของมาโคร มาโครแสดงถึง #define หมุดของพอร์ตทั้งหมดถูกกำหนดโดยมาโคร
ไวยากรณ์: #define dat Po // ทั้งพอร์ตถูกประกาศโดยตัวแปร //
dat = 0x01 // ส่งข้อมูลไปยังพอร์ต 0 //
โปรแกรม C แบบฝังตัวพื้นฐาน
การเขียนโปรแกรมไมโครคอนโทรลเลอร์จะแตกต่างกันไปในแต่ละรายการ ประเภทของระบบปฏิบัติการ . แม้ว่าระบบปฏิบัติการจะมีอยู่มากมายเช่น Linux, Windows, RTOS เป็นต้น อย่างไรก็ตาม RTOS มีข้อดีหลายประการสำหรับการพัฒนาระบบฝังตัว บทความนี้กล่าวถึงการเขียนโปรแกรม C แบบฝังพื้นฐานเพื่อพัฒนาการเขียนโปรแกรม C แบบฝังโดยใช้ไมโครคอนโทรลเลอร์ 8051
ขั้นตอนการเขียนโปรแกรม C ในตัว
- ไฟ LED กะพริบโดยใช้ไมโครคอนโทรลเลอร์ 8051
- ตัวเลขแสดงบนจอแสดงผล 7 ส่วนโดยใช้ไมโครคอนโทรลเลอร์ 8051
- การคำนวณและโปรแกรมจับเวลา / ตัวนับโดยใช้ไมโครคอนโทรลเลอร์ 8051
- การคำนวณและโปรแกรมการสื่อสารแบบอนุกรมโดยใช้ไมโครคอนโทรลเลอร์ 8051
- โปรแกรมขัดจังหวะโดยใช้ไมโครคอนโทรลเลอร์ 8051
- การเขียนโปรแกรมปุ่มกดโดยใช้ไมโครคอนโทรลเลอร์ 8051
- การเขียนโปรแกรม LCD ด้วยไมโครคอนโทรลเลอร์ 8051
ไฟ LED กะพริบโดยใช้ไมโครคอนโทรลเลอร์ 8051
LED เป็นอุปกรณ์เซมิคอนดักเตอร์ที่ใช้ในหลาย ๆ แอพพลิเคชั่นโดยส่วนใหญ่มีวัตถุประสงค์เพื่อบ่งชี้ มีการค้นหาแอพพลิเคชั่นมากมายเป็นตัวบ่งชี้ในระหว่างการทดสอบเพื่อตรวจสอบความถูกต้องของผลลัพธ์ในขั้นตอนต่างๆ มีราคาถูกมากและมีให้เลือกหลายรูปแบบสีและขนาด LED ใช้ในการออกแบบ กระดานแสดงข้อความ และไฟสัญญาณควบคุมการจราจรเป็นต้นที่นี่ไฟ LED จะเชื่อมต่อกับ PORT0 ของไมโครคอนโทรลเลอร์ 8051
ไฟ LED กะพริบโดยใช้ไมโครคอนโทรลเลอร์ 8051
1. 01010101
10101010
#include // ไฟล์ส่วนหัว //
เป็นโมฆะ main () // จุดสถิติการทำงานของโปรแกรม //
{
int ที่ไม่ได้ลงชื่อฉัน // ประเภทข้อมูล //
ในขณะที่ (1) // สำหรับลูปต่อเนื่อง //
{
P0 = 0x55 // ส่งค่าเฮกซ่าไปยังพอร์ต 0 //
สำหรับ (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // ส่งค่าเฮกซ่าไปยังพอร์ต 0 //
สำหรับ (i = 0i<30000i++) //normal delay//
}
}
2. 00000001
00000010
00000100
.
.
10,000,000
# รวม
เป็นโมฆะ main ()
{
ไม่ได้ลงนาม i
ถ่าน j, b
ในขณะที่ (1)
{
P0 = 0x01
b = P0
สำหรับ (j-0j<3000j++)
สำหรับ (j = 0j<8j++)
{
b = ข<<1
P0 = ข
สำหรับ (j-0j<3000j++)
}
}
}
3. 00001111
11110000
# รวม
เป็นโมฆะ main ()
{
ไม่ได้ลงนาม i
ในขณะที่ (1)
{
P0 = 0x0F
สำหรับ (j-0j<3000j++)
P0 = 0xF0
สำหรับ (j-0j<3000j++)
}
}
4. 00000001
00000011
00000111
.
.
11111111
# รวม
เป็นโมฆะ main ()
{
ไม่ได้ลงนาม i
ถ่าน j, b
ในขณะที่ (1)
{
P0 = 0x01
b = P0
สำหรับ (j-0j<3000j++)
สำหรับ (j = 0j<8j++)
0x01
P0 = ข
สำหรับ (j-0j<3000j++)
}
}
การแสดงตัวเลขบนจอแสดงผล 7 ส่วนโดยใช้ไมโครคอนโทรลเลอร์ 8051
การแสดงผล 7 ส่วน เป็นจอแสดงผลอิเล็กทรอนิกส์พื้นฐานซึ่งใช้ในหลายระบบเพื่อแสดงข้อมูลตัวเลข ประกอบด้วยไฟ LED แปดดวงซึ่งเชื่อมต่อในลักษณะตามลำดับเพื่อแสดงตัวเลขตั้งแต่ 0 ถึง 9 เมื่อเปิดสวิตช์ LED ที่เหมาะสม โดยสามารถแสดงได้ครั้งละหนึ่งหลักเท่านั้น
การแสดงตัวเลขบนจอแสดงผล 7 ส่วนโดยใช้ไมโครคอนโทรลเลอร์ 8051
1. WAP เพื่อแสดงตัวเลขในรูปแบบ ‘0 ถึง F’ บนหน้าจอ 7 ส่วนสี่จอ?
# รวม
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
เป็นโมฆะ main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0,0 × 10}
ไม่ได้ลงนามคุณ j
a = b = c = d = 1
ในขณะที่ (1)
{
สำหรับ (i = 0i<10i++)
{
P2 = n [i]
สำหรับ (j = 0j<60000j++)
}
}
}
2. WAP เพื่อแสดงตัวเลขตั้งแต่ '00 ถึง 10 'บนหน้าจอ 7 ส่วน?
# รวม
sbit a = P3 ^ 0
sbit b = P3 ^ 1
โมฆะ display1 ()
โมฆะ display2 ()
เป็นโมฆะล่าช้า ()
เป็นโมฆะ main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0,0 × 10}
ไม่ได้ลงนามคุณ j
ds1 = ds2 = 0
ในขณะที่ (1)
{
สำหรับ (i = 0, i<20i++)
display1 ()
display2 ()
}
}
โมฆะ display1 ()
{
a = 1
b = 0
P2 = s [ds1]
ล่าช้า ()
a = 1
b = 0
P2 = s [ds1]
ล่าช้า ()
}
โมฆะ display2 ()
{
ds1 ++
ถ้า (ds1> = 10)
{
ds1 = 0
ds2 ++
ถ้า (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
เป็นโมฆะล่าช้า ()
{
ไม่ได้ลงนาม k
สำหรับ (k = 0k<30000k++)
}
การคำนวณและโปรแกรมจับเวลา / ตัวนับโดยใช้ไมโครคอนโทรลเลอร์ 8051
ความล่าช้าเป็นปัจจัยสำคัญอย่างหนึ่งในการพัฒนาซอฟต์แวร์ประยุกต์ อย่างไรก็ตามการหน่วงเวลาตามปกติจะไม่ให้ผลลัพธ์อันล้ำค่าในการเอาชนะปัญหานี้สำหรับการใช้การหน่วงเวลา ตัวจับเวลาและตัวนับ เป็นส่วนประกอบฮาร์ดแวร์ของไมโครคอนโทรลเลอร์ซึ่งใช้ในหลาย ๆ แอพพลิเคชั่นเพื่อให้การหน่วงเวลาอันมีค่าด้วยการนับพัลส์งานทั้งสองถูกนำไปใช้โดยเทคนิคซอฟต์แวร์
ตั้งเวลาล่าช้า
WAP เพื่อสร้างการหน่วงเวลา 500us โดยใช้ T1M2 (timer1 และ mode2)?
# รวม
เป็นโมฆะ main ()
{
ถ่าน i
TMOD = 0x20 // ตั้งโหมดจับเวลา //
สำหรับ (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // ตั้งค่าหน่วงเวลา //
TH1 = 0x00
TR1 = 1 // ตัวจับเวลา oN //
ในขณะที่ (TF1 == 0) // ตรวจสอบแฟล็กบิต //
TF1 = 0
}
TR1 = 0 // ปิดตัวจับเวลา //
}
ความล่าช้าของลูปปกติ
เป็นโมฆะล่าช้า ()
{
ไม่ได้ลงนาม k
สำหรับ (k = 0k<30000k++)
}
การคำนวณและโปรแกรมการสื่อสารแบบอนุกรมโดยใช้ไมโครคอนโทรลเลอร์ 8051
การสื่อสารแบบอนุกรมมักใช้ในการส่งและรับสัญญาณ ไมโครคอนโทรลเลอร์ 8051 ประกอบด้วย การสื่อสารแบบอนุกรม UART สัญญาณที่ส่งและรับโดยพิน Rx และ Tx UART ใช้ไบต์ของข้อมูลและส่งแต่ละบิตในลักษณะตามลำดับ รีจิสเตอร์เป็นวิธีการรวบรวมและจัดเก็บข้อมูลในหน่วยความจำ UART เป็นโปรโตคอลแบบ half-duplex Half-duplex หมายถึงการถ่ายโอนและรับข้อมูล แต่ไม่ใช่ในเวลาเดียวกัน
การคำนวณและโปรแกรมการสื่อสารแบบอนุกรมโดยใช้ไมโครคอนโทรลเลอร์ 8051
1. WAP ในการส่งอักขระ 'S' ไปยังหน้าต่างอนุกรมใช้ 9600 เป็นอัตราการส่งข้อมูล?
28800 คืออัตรารับส่งข้อมูลสูงสุดของไมโครคอนโทรลเลอร์ 8051
28800/9600 = 3
อัตราการส่งข้อมูล ‘3’ จะถูกเก็บไว้ในตัวจับเวลา
# รวม
เป็นโมฆะ main ()
{
SCON = 0x50 // เริ่มการสื่อสารแบบอนุกรม //
TNOD = 0x20 // เลือกโหมดจับเวลา //
TH1 = 3 // โหลดอัตราบอด //
TR1 = 1 // เปิดตัวจับเวลา //
SBUF = ’S’ // เก็บอักขระในรีจิสเตอร์ //
ในขณะที่ (TI == 0) // ตรวจสอบการลงทะเบียนขัดจังหวะ //
TI = 0
TR1 = 0 // ปิดตัวจับเวลา //
ในขณะที่ (1) // ลูปต่อเนื่อง //
}
2. WAP เพื่อรับข้อมูลจากไฮเปอร์เทอร์มินัลและส่งข้อมูลนั้นไปยัง PORT 0 ของไมโครคอนโทรลเลอร์โดยใช้ 9600 baud?
28800 คืออัตรารับส่งข้อมูลสูงสุดของไมโครคอนโทรลเลอร์ 8051
28800/9600 = 3
อัตราการส่งข้อมูล ‘3’ จะถูกเก็บไว้ในตัวจับเวลา
# รวม
เป็นโมฆะ main ()
{
SCON = 0x50 // เริ่มการสื่อสารแบบอนุกรม //
TMOD = 0x20 // เลือกโหมดจับเวลา //
TH1 = 3 // โหลดอัตราบอด //
TR1 = 1 // เปิดตัวจับเวลา //
PORT0 = SBUF // ส่งข้อมูลจาก SBUF ไปยัง port0 //
ในขณะที่ (RI == 0) // ตรวจสอบการลงทะเบียนขัดจังหวะ //
RI = 0
TR1 = 0 // ปิดตัวจับเวลา //
ในขณะที่ (1) // หยุดโปรแกรมเมื่อได้รับตัวอักษร //
}
โปรแกรมขัดจังหวะโดยใช้ไมโครคอนโทรลเลอร์ 8051
การขัดจังหวะเป็นสัญญาณที่บังคับให้หยุดโปรแกรมปัจจุบันและดำเนินการโปรแกรมอื่นทันที ไมโครคอนโทรลเลอร์ 8051 ให้อินเทอร์รัปต์ 6 ตัวซึ่งมีทั้งภายในและภายนอก ขัดจังหวะแหล่งที่มา . เมื่อเกิดการขัดจังหวะไมโครคอนโทรลเลอร์จะหยุดงานปัจจุบันชั่วคราวและเข้าร่วมการขัดจังหวะโดยการเรียกใช้งาน ISR จากนั้นไมโครคอนโทรลเลอร์จะกลับไปที่งานล่าสุด
WAP เพื่อดำเนินการเลื่อนซ้ายเมื่อจับเวลา 0 ขัดจังหวะเกิดขึ้นจากนั้นดำเนินการขัดจังหวะสำหรับ P0 ในฟังก์ชันหลัก?
# รวม
ถ่าน b
เป็นโมฆะ timer0 () ขัดจังหวะ 2 // จับเวลาที่เลือก 0 ขัดจังหวะ //
{
b = 0x10
P1 = b<<2
}
เป็นโมฆะ main ()
{
ถ่าน a, i
IE = 0x82 // เปิดใช้งานการขัดจังหวะ timer0 //
TMOD = 0x01
TLo = 0xFC // ตัวจับเวลาขัดจังหวะ //
TH1 = 0xFB
TR0 = 1
a = 0x00
ในขณะที่ (1)
{
สำหรับ (i = 0i<255i++)
{
a ++
ปอ = ก
}
}
}
การเขียนโปรแกรมปุ่มกดโดยใช้ไมโครคอนโทรลเลอร์ 8051
แป้นพิมพ์เมทริกซ์เป็นอุปกรณ์สวิตชิ่งแบบอะนาล็อกซึ่งใช้ในแอพพลิเคชั่นฝังตัวจำนวนมากเพื่อให้ผู้ใช้สามารถทำงานที่จำเป็นได้ ก ปุ่มกดเมทริกซ์ ประกอบด้วยการจัดเรียงสวิตช์ในรูปแบบเมทริกซ์ในแถวและคอลัมน์ แถวและคอลัมน์เชื่อมต่อกับไมโครคอนโทรลเลอร์เพื่อให้แถวของสวิตช์เชื่อมต่อกับพินเดียวและสวิตช์ในแต่ละคอลัมน์จะเชื่อมต่อกับพินอื่นจากนั้นดำเนินการ
การเขียนโปรแกรมปุ่มกดโดยใช้ไมโครคอนโทรลเลอร์ 8051
1. WAP เพื่อสลับ LED โดยการกดสวิตช์
# รวม
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
เป็นโมฆะล่าช้า ()
เป็นโมฆะ main ()
{
ในขณะที่ (1)
{
a = 0
b = 1
c = 1
d = 1
ล่าช้า ()
a = 1
b = 0
c = 1
d = 1
เป็นโมฆะล่าช้า ()
{
ถ่าน i
TMOD = 0x20 // ตั้งโหมดจับเวลา //
สำหรับ (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // ตั้งค่าหน่วงเวลา //
TH1 = 0x00
TR1 = 1 // ตัวจับเวลา oN //
ในขณะที่ (TF1 == 0) // ตรวจสอบแฟล็กบิต //
TF1 = 0
}
TR1 = 0 // ปิดตัวจับเวลา //
}
2. WAP เพื่อเปิดไฟ LED โดยการกดปุ่ม ‘1’ บนปุ่มกด?
# รวม
sbit r1 = P2 ^ 0
sbit c1 = P3 ^ 0
sbit LED = P0 ^ 1
เป็นโมฆะ main ()
{
r1 = 0
ถ้า (c1 == 0)
{
LED = 0xff
}
}
3. WAP เพื่อแสดงหมายเลข 0,1,2,3,4,5 บนเจ็ดส่วนโดยการกดปุ่มตามลำดับบนปุ่มกด?
# รวม
sbit r1 = P2 ^ 0
sbit c1 = P3 ^ 0
sbit r2 = P2 ^ 0
sbit c2 = P3 ^ 0
sbit a = P0 ^ 1
เป็นโมฆะ main ()
{
r1 = 0 a = 1
ถ้า (c1 == 0)
{
a = 0xFC
}
ถ้า (c2 == 0)
{
a = 0x60
}
ถ้า (c3 == 0)
{
a = 0xDA
}
ถ้า (c4 == 0)
{
a = 0xF2
}
}
การเขียนโปรแกรม LCD ด้วยไมโครคอนโทรลเลอร์ 8051
จอ LCD เป็นอุปกรณ์อิเล็กทรอนิกส์ซึ่งมักใช้ในหลาย ๆ แอปพลิเคชั่นเพื่อแสดงข้อมูลในรูปแบบข้อความหรือรูปภาพ LCD เป็นจอแสดงผลที่สามารถแสดงอักขระบนหน้าจอได้อย่างง่ายดาย จอแสดงผล LCD ประกอบด้วยสายข้อมูล 8 เส้นและเส้นควบคุม 3 เส้นซึ่งใช้เพื่อเชื่อมต่อกับไมโครคอนโทรลเลอร์
การเขียนโปรแกรม LCD ด้วยไมโครคอนโทรลเลอร์ 8051
WAP เพื่อแสดง“ EDGEFX KITS” บนจอ LED?
# รวม
#define kam P0
เป็นโมฆะlcd_initi ()
voidlcd_dat (ถ่านที่ไม่ได้ลงชื่อ)
voidlcd_cmd (ถ่านที่ไม่ได้ลงชื่อ)
เป็นโมฆะล่าช้า ()
การแสดงผลเป็นโมฆะ (ถ่านที่ไม่ได้ลงชื่อ, ถ่าน r ที่ไม่ได้ลงชื่อ)
sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit ที่ = P2 ^ 2
เป็นโมฆะ main ()
{
lcd_initi ()
lcd_cmd (0x80)
ล่าช้า (100)
lcd_cmd (0xc0)
จอแสดงผล (“ edgefx kits”, 11)
ในขณะที่ (1)
}
การแสดงผลเป็นโมฆะ (ถ่านที่ไม่ได้ลงชื่อ, ถ่าน r ที่ไม่ได้ลงชื่อ)
{
ไม่ได้ลงนาม w
สำหรับ (w = 0w
lcd_data (s [w])
}
}
เป็นโมฆะlcd_initi ()
{
lcd_cmd (0 × 01)
ล่าช้า (100)
lcd_cmd (0 × 38)
ล่าช้า (100)
lcd_cmd (0 × 06)
ล่าช้า (100)
lcd_cmd (0x0c)
ล่าช้า (100)
}
voidlcd_dat (char dat ที่ไม่ได้ลงชื่อ)
{
หวี = นั่น
rs = 1
rw = 0
ใน = 1
ล่าช้า (100)
ใน = 0
}
}
voidlcd_cmd (ถ่าน cmd ที่ไม่ได้ลงชื่อ)
{
มา = cmd
rs = 0
rw = 0
ใน = 1
ล่าช้า (100)
ใน = 0
}
ความล่าช้าเป็นโมฆะ (ไม่ได้ลงนาม int n)
{
ไม่ได้ลงนามก
สำหรับ (a = 0a
หวังว่าบทความนี้จะให้ข้อมูลพื้นฐานเกี่ยวกับการเขียนโปรแกรมระบบฝังตัวโดยใช้ไมโครคอนโทรลเลอร์ 8051 พร้อมโปรแกรมตัวอย่างเล็กน้อย สำหรับการสอนการเขียนโปรแกรม C แบบฝังโดยละเอียดโปรดโพสต์ความคิดเห็นและคำถามของคุณในส่วนความคิดเห็นด้านล่าง