2023年9月30日 星期六

Python的生成式(Comprehensive)和產生器(Generator)有何不同呢?

參考文章:

  1. Python Comprehension 解析式語法
  2. Python Comprehension語法應用教學
  3. 產生器 generator


Python程式語言非常優美,其語法非常簡潔,特別是在使用生成式(Comprehensive)和產生器(Generator)時,但有時可能會讓人感到難以理解。生成式和產生器是Python中的兩個不同概念,它們用於不同的編程任務,並且在功能和用法上存在顯著區別。


  • 生成式(Comprehensive)

在Python中,「生成式」通常指的是列表生成式(List Comprehension)或字典生成式(Dictionary Comprehension)。這是一種以簡潔的方式創建新列表或字典的方法。它們通常用於將一個可迭代對象(例如列表、元組或字符串)轉換為另一個列表或字典,同時可以對元素進行篩選、映射或轉換。以下是一個列表生成式的示例,它將一個列表中的每個元素平方並創建一個新的列表:

範例一、平方串列生成式

1
2
3
4
原始串列 = [1, 2, 3, 4, 5]
平方串列 = [x**2 for x in 原始串列]
print(原始串列)
print(平方串列)

執行結果:
[1, 2, 3, 4, 5]
[1, 4, 9, 16, 25]

範例二、偶數平方串列生成式
1
2
3
original_list = [1, 2, 3, 4, 5, 6]
squared_even_list = [x**2 for x in original_list if x % 2 == 0]
print(squared_even_list)  # 輸出 [4, 16, 36]

執行結果:
[4, 16, 36]

範例三、字典生成式
1
2
3
original_dict = {'a': 1, 'b': 2, 'c': 3}
flipped_dict = {value: key for key, value in original_dict.items()}
print(flipped_dict)  # 輸出 {1: 'a', 2: 'b', 3: 'c'}

執行結果:
{1: 'a', 2: 'b', 3: 'c'}

範例四、帶條件的串列生成式
1
2
3
original_list = [1, 2, 3, 4, 5, 6]
filtered_list = [x for x in original_list if x > 3]
print(filtered_list)  # 輸出 [4, 5, 6]

執行結果:
[4, 5, 6]

範例五、帶條件的字典生成式
1
2
3
original_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
filtered_dict = {key: value for key, value in original_dict.items() if value > 2}
print(filtered_dict)  # 輸出 {'c': 3, 'd': 4}

執行結果:
{'c': 3, 'd': 4}
  • 產生器(Generator)

產生器是一種特殊的迭代器,它允許您根據需要生成值,而無需一次性將所有值存儲在記憶體中。產生器通常使用函數和 yield 陳述句來定義。產生器的主要優勢在於處理大量數據時,它們可以節省記憶體,並且能夠以惰性(lazy)的方式生成數據,只在需要時生成下一個值。以下是一個產生器的示例:

範例六、產生器

1
2
3
4
5
6
7
8
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
for value in gen:
    print(value)

執行結果:

1

2

3

範例七、費氏級數產生器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def fibonacci_generator():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

fib_gen = fibonacci_generator()
for _ in range(10):
    print(next(fib_gen), end=' ')  # 輸出前10個費氏級數的數字
# 輸出 0 1 1 2 3 5 8 13 21 34

執行結果:
0 1 1 2 3 5 8 13 21 34 

範例八、無限序列奇數產生器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def odd_number_generator():
    n = 1
    while True:
        yield n
        n += 2

odd_gen = odd_number_generator()
for _ in range(5):
    print(next(odd_gen), end=' ')  # 輸出前5個奇數
# 輸出 1 3 5 7 9

執行結果:
1 3 5 7 9 

範例九、從0開始的自然數產生器
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def natural_number_generator():
    n = 0
    while True:
        yield n
        n += 1

nat_gen = natural_number_generator()
for _ in range(5):
    print(next(nat_gen), end=' ')  # 輸出前5個自然數
# 輸出 0 1 2 3 4

執行結果:
0 1 2 3 4 

範例十、隨機亂數產生器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import random

def random_number_generator():
    while True:
        yield random.randint(1, 100)

rand_gen = random_number_generator()
for _ in range(5):
    print(next(rand_gen), end=' ')  # 輸出前5個隨機數
# 例如:輸出 42 17 89 5 73(實際數字會不同)

執行結果:(注意每次執行結果都不同)

86 52 33 71 8 

以上範例展示了生成式和產生器的不同用途。生成式用於創建新的串列、字典、和集合,而產生器用於按需要來生成數值,特別適用於處理大型數據集或需要逐個生成數值的情況。

2023年9月29日 星期五

用Python以及ChapGPT來繪製虎尾鎮雜糧類前三名作物的近三年走勢圖

1.資料來源:農情報告資訊網

2.利用一般作物查詢的各項作物種植面積查詢(個別縣市及鄉鎮),來查詢虎尾鎮109年~111年的農作,再把資訊給ChatGPT,請它整理出雜糧類前三名。

3. 請ChatGPT,下達指令"給我Python程式,並繪製圖表",若產生簡體版,可以下達"用繁體字",程式碼如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import matplotlib.pyplot as plt

# 年度數據
years = ["109", "110", "111"]
peanuts = [1206.31, 1235.16, 1304.03]
corn = [1080.20, 967.96, 917.76]
sweet_potatoes = [117.52, 112.90, 87.85]

# 建立新的圖表
plt.figure(figsize=(10, 6))

# 繪製落花生的趨勢線
plt.plot(years, peanuts, marker='o', label='落花生')

# 繪製食用玉米的趨勢線
plt.plot(years, corn, marker='o', label='食用玉米')

# 繪製甘藷的趨勢線
plt.plot(years, sweet_potatoes, marker='o', label='甘藷')

# 添加圖例
plt.legend()

# 添加標題和標籤
plt.title('雲林縣虎尾鎮農產品產量趨勢')
plt.xlabel('年度')
plt.ylabel('產量(公斤)')

# 顯示圖表
plt.grid(True)
plt.show()

4.執行結果:

5.加上中文字型顯示的程式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 指定繁體中文字型
font_path = "C:\Windows\Fonts\kaiu.ttf"  # 請替換為您自己的繁體中文字型文件路徑
font_prop = FontProperties(fname=font_path)

# 年度數據
years = ["109", "110", "111"]
peanuts = [1206.31, 1235.16, 1304.03]
corn = [1080.20, 967.96, 917.76]
sweet_potatoes = [117.52, 112.90, 87.85]

# 建立一個新的圖表
plt.figure(figsize=(10, 6))

# 繪製落花生的趨勢線
plt.plot(years, peanuts, marker='o', label='落花生')

# 繪製食用玉米的趨勢線
plt.plot(years, corn, marker='o', label='食用玉米')

# 繪製甘藷的趨勢線
plt.plot(years, sweet_potatoes, marker='o', label='甘藷')

# 添加圖例
plt.legend(prop=font_prop)

# 添加標題和標籤
plt.title('雲林縣虎尾鎮農產品產量趨勢', fontproperties=font_prop)
plt.xlabel('年度', fontproperties=font_prop)
plt.ylabel('產量(公斤)', fontproperties=font_prop)

# 顯示圖表
plt.grid(True)
plt.show()

6.執行結果:


用Python以及ChaptGPT來分析虎尾鎮111年度的農產品

1.資料來源:農情報告資料網

2.選擇"一般作物查詢"的"各項作物種植面積查詢(個別縣市及鄉鎮)"選項。

3.如上圖,按下"送出"鈕,可以得到下列資料:

4.將上圖有關於虎尾鎮農作物的資訊全部選擇起來,如下圖:

5.複製上圖的資料給ChatGPT,可以得到下列資料。


6.下達"用表格整理"的指令。


7.下達指令"給我 Python程式能整理成表格"


8.ChatGPT產生出來的程式,因資料集較多,會以簡化方式呈現。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd

# 資料
data = [
    ("雜糧類", "合計", 4120.43),
    ("雜糧類", "落花生", 1304.03),
    ("雜糧類", "食用玉米", 917.76),
    ("雜糧類", "甘藷", 87.85),
    # ... 其他作物資料
]

# 建立DataFrame
df = pd.DataFrame(data, columns=["類別", "作物", "面積 (公頃)"])

# 顯示DataFrame
print(df)

9.可以下達"請給我完整資料集的程式"

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
import pandas as pd

data = [
    ("雜糧類", "合計", 4120.43),
    ("雜糧類", "落花生", 1304.03),
    ("雜糧類", "食用玉米", 917.76),
    ("雜糧類", "甘藷", 87.85),
    ("雜糧類", "蜀黍高粱", 21.33),
    ("雜糧類", "綠豆", 4.30),
    ("雜糧類", "大豆", 4.15),
    ("雜糧類", "其他豆類", 0.35),
    ("蔬菜類", "合計", 1520.67),
    ("蔬菜類", "馬鈴薯", 451.09),
    ("蔬菜類", "蒜頭", 400.78),
    ("蔬菜類", "甘藍", 135.06),
    ("蔬菜類", "蔥", 92.26),
    ("蔬菜類", "食用番茄", 55.85),
    ("蔬菜類", "不結球白菜", 55.55),
    ("蔬菜類", "青花菜", 46.03),
    ("蔬菜類", "萵苣", 36.42),
    ("蔬菜類", "芹菜", 31.65),
    ("蔬菜類", "其他葉菜", 26.75),
    ("蔬菜類", "結球白菜", 22.40),
    ("蔬菜類", "洋香瓜", 22.30),
    ("蔬菜類", "甜椒", 20.86),
    ("蔬菜類", "南瓜", 19.55),
    ("蔬菜類", "西瓜", 19.32),
    ("蔬菜類", "越瓜", 12.35),
    ("蔬菜類", "胡瓜", 10.42),
    ("蔬菜類", "香瓜", 10.36),
    ("蔬菜類", "芥藍", 7.20),
    ("蔬菜類", "大芥菜", 6.10),
    ("蔬菜類", "節瓜毛瓜", 5.95),
    ("蔬菜類", "扁蒲", 5.25),
    ("蔬菜類", "辣椒", 4.40),
    ("蔬菜類", "菠菜", 4.20),
    ("蔬菜類", "蘆筍", 3.84),
    ("蔬菜類", "竹筍", 2.50),
    ("蔬菜類", "芫荽", 1.85),
    ("蔬菜類", "茄子", 1.80),
    ("蔬菜類", "其他果菜", 1.50),
    ("蔬菜類", "苦瓜", 1.15),
    ("蔬菜類", "毛豆", 1.10),
    ("蔬菜類", "香芹菜", 1.10),
    ("蔬菜類", "冬瓜", 1.00),
    ("蔬菜類", "胡蘿蔔", 0.70),
    ("蔬菜類", "結頭菜", 0.55),
    ("蔬菜類", "蘿蔔", 0.53),
    ("蔬菜類", "草莓", 0.30),
    ("蔬菜類", "蔥頭", 0.30),
    ("蔬菜類", "四季豆", 0.20),
    ("蔬菜類", "絲瓜", 0.15),
    ("果品類", "合計", 116.13),
    ("果品類", "香蕉", 60.05),
    ("果品類", "其他果樹", 16.73),
    ("果品類", "紅龍果", 8.22),
    ("果品類", "木瓜", 8.02),
    ("果品類", "改良種芒果", 6.50),
    ("果品類", "番石榴", 3.89),
    ("果品類", "柳橙", 3.00),
    ("果品類", "檸檬", 2.72),
    ("果品類", "酪梨", 2.10),
    ("果品類", "文旦柚", 1.40),
    ("果品類", "可可椰子", 0.90),
    ("果品類", "椪柑", 0.72),
    ("果品類", "百香果", 0.65),
    ("果品類", "荔枝", 0.50),
    ("果品類", "蓮霧", 0.48),
    ("果品類", "其他柑桔", 0.25),
    ("牧草類", "合計", 5.80),
    ("牧草類", "其他長期牧草", 5.40),
    ("牧草類", "狼尾草", 0.40),
    ("特用作物", "合計", 33.10),
    ("特用作物", "羅勒", 31.45),
    ("特用作物", "其他短期特作", 0.60),
    ("特用作物", "其他長期特作", 0.40),
    ("特用作物", "向日葵", 0.30),
    ("特用作物", "生食甘蔗", 0.25),
    ("特用作物", "荖葉", 0.10),
    ("藥用作物", "合計", 2.25),
    ("藥用作物", "其他藥用", 2.10),
    ("藥用作物", "薄荷", 0.15),
    ("花卉", "合計", 12.74),
    ("花卉", "洋桔梗", 5.45),
    ("花卉", "夜來香", 4.00),
    ("花卉", "蘭花", 1.67),
    ("花卉", "其他短期切花", 0.60),
    ("花卉", "菊花", 0.50),
    ("花卉", "玫瑰", 0.40),
    ("花卉", "文心蘭", 0.12),
    ("苗圃", "苗圃", 89.97),
    ("洋菇類", "洋菇", 1320.00),
    ("香菇及其他菇類", "備註", ""),
]

# 建立DataFrame
df = pd.DataFrame(data, columns=["類別", "作物", "面積 (公頃)"])

# 顯示DataFrame
print(df)

10.執行結果:

11.下達"每一項列出前三名的程式"指令

12.您應該會發現,資料集被ChatGPT給省略掉了,完整程式如下:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import pandas as pd

data = [
    ("雜糧類", "合計", 4120.43),
    ("雜糧類", "落花生", 1304.03),
    ("雜糧類", "食用玉米", 917.76),
    ("雜糧類", "甘藷", 87.85),
    ("雜糧類", "蜀黍高粱", 21.33),
    ("雜糧類", "綠豆", 4.30),
    ("雜糧類", "大豆", 4.15),
    ("雜糧類", "其他豆類", 0.35),
    ("蔬菜類", "合計", 1520.67),
    ("蔬菜類", "馬鈴薯", 451.09),
    ("蔬菜類", "蒜頭", 400.78),
    ("蔬菜類", "甘藍", 135.06),
    ("蔬菜類", "蔥", 92.26),
    ("蔬菜類", "食用番茄", 55.85),
    ("蔬菜類", "不結球白菜", 55.55),
    ("蔬菜類", "青花菜", 46.03),
    ("蔬菜類", "萵苣", 36.42),
    ("蔬菜類", "芹菜", 31.65),
    ("蔬菜類", "其他葉菜", 26.75),
    ("蔬菜類", "結球白菜", 22.40),
    ("蔬菜類", "洋香瓜", 22.30),
    ("蔬菜類", "甜椒", 20.86),
    ("蔬菜類", "南瓜", 19.55),
    ("蔬菜類", "西瓜", 19.32),
    ("蔬菜類", "越瓜", 12.35),
    ("蔬菜類", "胡瓜", 10.42),
    ("蔬菜類", "香瓜", 10.36),
    ("蔬菜類", "芥藍", 7.20),
    ("蔬菜類", "大芥菜", 6.10),
    ("蔬菜類", "節瓜毛瓜", 5.95),
    ("蔬菜類", "扁蒲", 5.25),
    ("蔬菜類", "辣椒", 4.40),
    ("蔬菜類", "菠菜", 4.20),
    ("蔬菜類", "蘆筍", 3.84),
    ("蔬菜類", "竹筍", 2.50),
    ("蔬菜類", "芫荽", 1.85),
    ("蔬菜類", "茄子", 1.80),
    ("蔬菜類", "其他果菜", 1.50),
    ("蔬菜類", "苦瓜", 1.15),
    ("蔬菜類", "毛豆", 1.10),
    ("蔬菜類", "香芹菜", 1.10),
    ("蔬菜類", "冬瓜", 1.00),
    ("蔬菜類", "胡蘿蔔", 0.70),
    ("蔬菜類", "結頭菜", 0.55),
    ("蔬菜類", "蘿蔔", 0.53),
    ("蔬菜類", "草莓", 0.30),
    ("蔬菜類", "蔥頭", 0.30),
    ("蔬菜類", "四季豆", 0.20),
    ("蔬菜類", "絲瓜", 0.15),
    ("果品類", "合計", 116.13),
    ("果品類", "香蕉", 60.05),
    ("果品類", "其他果樹", 16.73),
    ("果品類", "紅龍果", 8.22),
    ("果品類", "木瓜", 8.02),
    ("果品類", "改良種芒果", 6.50),
    ("果品類", "番石榴", 3.89),
    ("果品類", "柳橙", 3.00),
    ("果品類", "檸檬", 2.72),
    ("果品類", "酪梨", 2.10),
    ("果品類", "文旦柚", 1.40),
    ("果品類", "可可椰子", 0.90),
    ("果品類", "椪柑", 0.72),
    ("果品類", "百香果", 0.65),
    ("果品類", "荔枝", 0.50),
    ("果品類", "蓮霧", 0.48),
    ("果品類", "其他柑桔", 0.25),
    ("牧草類", "合計", 5.80),
    ("牧草類", "其他長期牧草", 5.40),
    ("牧草類", "狼尾草", 0.40),
    ("特用作物", "合計", 33.10),
    ("特用作物", "羅勒", 31.45),
    ("特用作物", "其他短期特作", 0.60),
    ("特用作物", "其他長期特作", 0.40),
    ("特用作物", "向日葵", 0.30),
    ("特用作物", "生食甘蔗", 0.25),
    ("特用作物", "荖葉", 0.10),
    ("藥用作物", "合計", 2.25),
    ("藥用作物", "其他藥用", 2.10),
    ("藥用作物", "薄荷", 0.15),
    ("花卉", "合計", 12.74),
    ("花卉", "洋桔梗", 5.45),
    ("花卉", "夜來香", 4.00),
    ("花卉", "蘭花", 1.67),
    ("花卉", "其他短期切花", 0.60),
    ("花卉", "菊花", 0.50),
    ("花卉", "玫瑰", 0.40),
    ("花卉", "文心蘭", 0.12),
    ("苗圃", "苗圃", 89.97),
    ("洋菇類", "洋菇", 1320.00),
    ("香菇及其他菇類", "備註", ""),
]

# 建立DataFrame
df = pd.DataFrame(data, columns=["類別", "作物", "面積 (公頃)"])

# 將資料按照類別和面積排序,降序排列
df_sorted = df.sort_values(by=["類別", "面積 (公頃)"], ascending=[True, False])

# 創建一個空的DataFrame,用於存儲前三名
top_three_df = pd.DataFrame(columns=["類別", "作物", "面積 (公頃)"])

# 找出每一類的前三名
categories = df_sorted["類別"].unique()
for category in categories:
    top_three = df_sorted[df_sorted["類別"] == category].head(3)
    top_three_df = pd.concat([top_three_df, top_three])

# 重設索引
top_three_df.reset_index(drop=True, inplace=True)

# 顯示前三名
print(top_three_df)

13.虎尾鎮前三名的農作物的執行結果


2023年9月24日 星期日

單晶片8051看門狗計時器設計用意以及程式設計

單晶片8051是一種廣泛使用的嵌入式微控制器,具有多種應用,包括控制、監視和通信等。其中的看門狗計時器電路(Watchdog Timer Circuit)是8051微控制器的一個重要功能,其主要用途是增加系統的可靠性和穩定性。

看門狗電路的主要用途說明如下:

  • 監控系統異常:看門狗電路是一種計時器,定期地產生一個計時器溢出中斷,當系統正常運行時,主程序會定期重設這個計時器。如果系統出現故障或卡死,主程序無法正常運行,那麼計時器將在預定的時間內達到溢出,觸發中斷,這將被視為系統異常。
  • 系統重置(Reset):一旦看門狗計時器達到溢位並觸發中斷,它將引發一個硬體重置信號,將8051單晶片微控制器恢復到最初始的狀態。這樣可以確保在系統出現故障或死循環時,讓單晶片微控制器能夠重新啟動並恢復正常運行。
  • 防止無限循環:如果系統中的軟體程序執行時,因任何原因進入無限循環或無限延遲,看門狗計時器電路將在預定的時間內達到溢出,強制系統重新啟動,防止系統陷入永無止境的等待狀態。

總之,單晶片8051的看門狗計時器電路可以用於監控系統的運行情況,並在檢測到異常情況時,執行硬體重置的動作,以確保系統的穩定性和可靠性。這有助於避免系統在故障情況下長時間停擺,並提高了嵌入式系統應用的可用性。

以下是在KEIL IDE模擬器中進行看門狗計時器(WDT)重置範例以及在硬體開發套件中進行測試的情形。



程式碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include<reg52.h>
sfr WDTRST = 0xA6;
void delay(unsigned int x)
{
	while(x--);
}
void main()
{

	P0=0x0;
	delay(25000);
	P0=0xff;
	delay(25000);
	WDTRST=0x1e;
	WDTRST=0xe1;
	while(1);
}

程式說明:
這個範例是使用8051單晶片微控制器來實現一個簡單的看門狗計時器(WDT)的範例。以下是該範例的功能說明:
  1. #include <reg52.h>:這是包含了8051微控制器的暫存器定義文件。它是用來定義和操作微控制器的硬體配置和暫存器。
  2. sfr WDTRST = 0xA6;:這一行定義了一個特殊功能暫存器(SFR)WDTRST,用來控制看門狗計時器(WDT)的行為。WDTRST位於地址0xA6。
  3. void delay(unsigned int x):這是一個自定義的延遲函數,用於引入一定的時間延遲。延遲的長度由參數x的值控制。
  4. void main():這是主函數,程序的執行從這裡開始。
  5. P0=0x0;:這一行將P0(8051的一個I/O接口)的所有位元設置為0,即將P0接口的所有輸出引腳設置為低電位。
  6. delay(25000);:這一行執行了delay函數,將程序執行約25000個循環迴圈,達到時間延遲的效果。
  7. P0=0xff;:這一行將P0接口的所有位元設置為1,即將P0接口的所有輸出腳位設置為高電。
  8. delay(25000);:再次執行delay函數,時間延遲。
  9. WDTRST=0x1e;WDTRST=0xe1;:接下來,致能看門狗功能。
  10. while(1);:進入一個無限循環,程序將在這裡無限等待,不再執行其他指令。
總的來說,這個範例演示了如何使用8051微控制器的看門狗計時器,在系統進入無窮迴圈時,利用看門狗電路來重新啟動,因此您可以看到LED的閃爍。

2023年9月14日 星期四

建立Keil C的專案檔的步驟

 1.選擇new uVersion Project...功能選項,建立專案檔。


2.建立目錄(以test為例),並將專案檔命名為test,按下存檔鈕。


3.查看CPU上的名稱,並在Search中輸入89S51,點選AT89S51選項,按下OK鍵。

4.選擇是(Y)鈕。


5.選擇File功能表中New...功能選項,並輸入程式。

程式碼:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <regx51.h>
#define LEDIO P1_0	

void Delay_ms(unsigned int count) 
{
			unsigned int i,j;
			for(i=0;i<count;i++)
					for(j=0;j<123;j++);
}

main()      		
{
			while(1)		
			{
					LEDIO=0;		
					Delay_ms(200);	
					LEDIO=1;		
					Delay_ms(200);	
			}
}

6.另存新檔(File->Save As...),檔名main.c。

7.點選Source Group 1選項,按下右鍵,選擇Add Existing File to Group 'Source Group1'...

8.點選Source Group 1選項,按下右鍵,選擇Options for Group 'Source Group1'...

9.按下Rebuild鍵

10.查看.HEX檔案